Perubahan realisasi PBB

1 parent 65070991
...@@ -3,7 +3,7 @@ eis-pcpd,PCPD,/eis/pcpd,1,0,0 ...@@ -3,7 +3,7 @@ eis-pcpd,PCPD,/eis/pcpd,1,0,0
eis-pcpd-act,PCPD Act,/eis/pcpd/{act}/act,1,0 eis-pcpd-act,PCPD Act,/eis/pcpd/{act}/act,1,0
eis-pajak,Pajak,#,1,0,1 eis-pajak,Pajak,#,1,0,1
eis-pajak-kumulatif,Pajak,/eis/pajak,1,0,1,eis-pajak,pcpd,Views,view_pajak,,pcpd.pt eis-pajak-kumulatif,Pajak,/eis/pajak,1,0,1,eis-pajak,pcpd,Views,view_pajak,,pcpd.pt
eis-pbb,PBB,/eis/pbb,1,0,1,eis-pajak,pcpd,Views,view_pbb,eis,pcpd.pt eis-pbb,PBB,/eis/pbb,1,0,1,eis-pajak,pcpd,Views,view_pbb,eis,pbb.pt
eis-bphtb,BPHTB,/eis/bphtb,1,0,1,eis-pajak,pcpd,Views,view_bphtb,eis,pcpd.pt eis-bphtb,BPHTB,/eis/bphtb,1,0,1,eis-pajak,pcpd,Views,view_bphtb,eis,pcpd.pt
eis-hotel,Hotel,/eis/hotel,1,0,1,eis-pajak,pcpd,Views,view_hotel,eis,pcpd.pt eis-hotel,Hotel,/eis/hotel,1,0,1,eis-pajak,pcpd,Views,view_hotel,eis,pcpd.pt
eis-resto,Restoran,/eis/resto,1,0,1,eis-pajak,pcpd,Views,view_resto,eis,pcpd.pt eis-resto,Restoran,/eis/resto,1,0,1,eis-pajak,pcpd,Views,view_resto,eis,pcpd.pt
......
...@@ -9,7 +9,7 @@ from datatables import ColumnDT, DataTables ...@@ -9,7 +9,7 @@ from datatables import ColumnDT, DataTables
from sqlalchemy import func, and_, String 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 from ..models.payment import PaymentPBB, PaymentPAD, PaymentBPHTB, PaymentWEBR
from opensipkd.pbb.monitoring.models import PembayaranSppt from opensipkd.pbb.monitoring.models import PembayaranSppt, Kecamatan, Kelurahan, Sppt
from datetime import timedelta from datetime import timedelta
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
...@@ -450,6 +450,48 @@ class Views(BaseView): ...@@ -450,6 +450,48 @@ class Views(BaseView):
} }
return resp return resp
def get_pbb_area(self):
if log.root.level == logging.DEBUG:
today = datetime.strptime('2025-06-05', "%Y-%m-%d")
else:
today = datetime.now().date()
rows = Kecamatan.query().order_by(Kecamatan.kd_kecamatan)
kecamatan = {f"{row.kd_kecamatan}": {"nama": row.nm_kecamatan,
"ketetapan": 0,
"realisasi": 0,
"sisa": 0,
"persen": 0} for row in rows}
ketetapan = Sppt.query_from(
[Sppt.kd_kecamatan,
func.sum(Sppt.pbb_yg_harus_dibayar_sppt)
])\
.filter(Sppt.thn_pajak_sppt == self.ses['tahun'])\
.group_by(Sppt.kd_kecamatan)
for row in ketetapan:
kecamatan[row[0]]["ketetapan"] = row[1] or 0
realisasi = PembayaranSppt.query_from(
[PembayaranSppt.kd_kecamatan,
func.sum(PembayaranSppt.jml_sppt_yg_dibayar -
PembayaranSppt.denda_sppt)
])\
.filter(PembayaranSppt.thn_pajak_sppt == self.tahun)\
.group_by(PembayaranSppt.kd_kecamatan)
for row in realisasi:
kecamatan[row[0]]["realisasi"] = row[1] or 0
kecamatan[row[0]]["sisa"] = kecamatan[row[0]]["ketetapan"] - row[1]
kecamatan[row[0]]["persen"] = kecamatan[row[0]]["realisasi"] / \
kecamatan[row[0]]["ketetapan"] * \
100 if kecamatan[row[0]]["ketetapan"] > 0 else 0
return [{"kode": kec, "nama": kecamatan[kec]["nama"],
"ketetapan": kecamatan[kec]["ketetapan"],
"realisasi": kecamatan[kec]["realisasi"],
"sisa": kecamatan[kec]["sisa"],
"persen": kecamatan[kec]["persen"],
} for kec in kecamatan]
@view_config(route_name='eis-pcpd-act', renderer='json') @view_config(route_name='eis-pcpd-act', renderer='json')
def view_app_act(self): def view_app_act(self):
tahun = self.ses['tahun'] tahun = self.ses['tahun']
...@@ -466,6 +508,15 @@ class Views(BaseView): ...@@ -466,6 +508,15 @@ class Views(BaseView):
return json_data return json_data
elif act == 'pbb': elif act == 'pbb':
resp = self.get_pbb_data() resp = self.get_pbb_data()
resp["tabel"] = self.get_pbb_area()
ketetapan = Sppt.query_from(func.sum(Sppt.pbb_yg_harus_dibayar_sppt))\
.filter(Sppt.thn_pajak_sppt == tahun).scalar()
realisasi = PembayaranSppt.query_from(
func.sum(PembayaranSppt.jml_sppt_yg_dibayar - PembayaranSppt.denda_sppt))\
.filter(PembayaranSppt.thn_pajak_sppt == tahun).scalar()
resp["realisasi"] =[ketetapan or 0, realisasi or 0]
elif act == 'bphtb': elif act == 'bphtb':
resp = self.get_bphtb_data() resp = self.get_bphtb_data()
elif act == 'webr': elif act == 'webr':
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
<metal:css fill-slot="css_files"> <metal:css fill-slot="css_files">
<link rel="stylesheet" href="${home}/eis/static/css/odometer-theme-plaza.css"> <link rel="stylesheet" href="${home}/eis/static/css/odometer-theme-plaza.css">
<link href="${home}/eis/static/css/pcpd.css" rel="stylesheet"> <link href="${home}/eis/static/css/pcpd.css" rel="stylesheet">
<link rel="stylesheet" href="${home}/static/v3/plugin/datatables/1.10/media/css/dataTables.bootstrap.css">
</metal:css> </metal:css>
<style metal:fill-slot="styles"> <style metal:fill-slot="styles">
</style> </style>
...@@ -39,7 +40,7 @@ ...@@ -39,7 +40,7 @@
<h2 class="primary"> <h2 class="primary">
<b>Rp. <h2 class="odometer sub-odometer bold primary" id="ytd">0</h2></b> <b>Rp. <h2 class="odometer sub-odometer bold primary" id="ytd">0</h2></b>
</h2> </h2>
<h3 class="primary bold"><span id="trxYtd">1067</span> Transaksi</h3> <h3 class="primary bold"><span id="trxYtd">0</span> Transaksi</h3>
</div> </div>
</div> </div>
</div> </div>
...@@ -48,7 +49,7 @@ ...@@ -48,7 +49,7 @@
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"> <div class="panel-heading">
<img src="${home}/eis/static/42x42-pie-chart.png" class="icon-rounded" alt="" align="left"> <img src="${home}/eis/static/42x42-pie-chart.png" class="icon-rounded" alt="" align="left">
<h5 class="text-left bold">Jumlah Transaksi <h5 class="text-left bold">Ketetapan dan Realisasi tahun ${request.session['tahun']}
<i class="fa fa-info-circle pull-right icon-color"></i> <i class="fa fa-info-circle pull-right icon-color"></i>
</h5> </h5>
</div> </div>
...@@ -139,7 +140,7 @@ ...@@ -139,7 +140,7 @@
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"> <div class="panel-heading">
<img src="${home}/eis/static/42x42-statistics.png" class="icon-rounded" alt="" align="left"> <img src="${home}/eis/static/42x42-statistics.png" class="icon-rounded" alt="" align="left">
<h5 class="text-left bold">Realisasi <h5 class="text-left bold">Ketetapan dan Realisasi per Kecamatan
<i class="fa fa-info-circle pull-right icon-color"></i> <i class="fa fa-info-circle pull-right icon-color"></i>
</h5> </h5>
</div> </div>
...@@ -196,54 +197,99 @@ ...@@ -196,54 +197,99 @@
<script src="${home}/eis/static/js/chart.js"></script> <script src="${home}/eis/static/js/chart.js"></script>
<script src="${home}/eis/static/js/chartjs-adapter-date-fns.bundle.min.js"></script> <script src="${home}/eis/static/js/chartjs-adapter-date-fns.bundle.min.js"></script>
<script src="${home}/eis/static/js/odometer.js"></script> <script src="${home}/eis/static/js/odometer.js"></script>
<script src="${home}/static/v3/plugin/datatables/1.10/media/js/jquery.dataTables.min.js"></script>
<script src="${home}/static/v3/plugin/datatables/1.10/media/js/jquery.dataTables.ext.js"></script>
</metal:js> </metal:js>
<script metal:fill-slot="scripts"> <script metal:fill-slot="scripts">
var pieChart; var barChart;
var amtTrendChart; var amtTrendChart;
var trxTrendChart; // var trxTrendChart;
var amtKumulatifChart; // var amtKumulatifChart;
var trxKumulatifChart; // var trxKumulatifChart;
var newData; var newData;
$(document).ready(function () { $(document).ready(function () {
var ctx = document.getElementById('chartPie').getContext('2d'); var ctx = document.getElementById('chartPie').getContext('2d');
var canvas = document.getElementById('chartPie'); var canvas = document.getElementById('chartPie');
canvas.width = window.innerWidth; canvas.width = window.innerWidth;
canvas.height = window.innerHeight / 4.2; canvas.height = window.innerHeight / 2;
const pie_data = { // const bar_data = {
labels: [ // labels: [
'Pajak', // 'Ketetapan',
'Retribusi', // 'Realisasi',
], // ],
// datasets: [{
// data: [300, 100],
// backgroundColor: [
// '#16a75c', //'rgb(255, 99, 132)',
// '#ffb900', // 'rgb(54, 162, 235)'
// ],
// hoverOffset: 4
// }]
// };
// pieChart = new Chart(ctx,
// {
// type: 'pie',
// data: pie_data,
// options: {
// responsive: true,
// maintainAspectRatio: false,
// plugins: {
// legend: {
// position: 'bottom'
// }
// }
// }
// }
// );
const bar_data = {
labels: ['Ketetapan', 'Realisasi'],
datasets: [{ datasets: [{
data: [300, 100], data: [300, 100],
fill: false,
backgroundColor: [ backgroundColor: [
'#16a75c', //'rgb(255, 99, 132)', 'rgba(255, 99, 132, 0.2)',
'#ffb900', // 'rgb(54, 162, 235)' 'rgba(255, 159, 64, 0.2)',
], ],
hoverOffset: 4 borderColor: [
'rgb(255, 99, 132)',
'rgb(255, 159, 64)',
],
borderWidth: 1
}] }]
}; };
pieChart = new Chart(ctx,
barChart = new Chart(ctx,
{ {
type: 'pie', type: 'bar',
data: pie_data, data: bar_data,
options: { options: {
responsive: true, indexAxis: 'y',
maintainAspectRatio: false, // elements: {
// bar: {
// borderWidth: 2,
// }
// },
// responsive: true,
plugins: { plugins: {
legend: { legend: {
position: 'bottom' display: false,
} // position: 'right',
} },
// title: {
// display: true,
// text: 'Chart.js Horizontal Bar Chart'
// }
} }
},
} }
); );
var ctx = document.getElementById('chartRealisasi').getContext('2d'); var ctx = document.getElementById('chartRealisasi').getContext('2d');
var canvas = document.getElementById('chartRealisasi'); var canvas = document.getElementById('chartRealisasi');
canvas.width = window.innerWidth; canvas.width = window.innerWidth;
...@@ -272,72 +318,77 @@ ...@@ -272,72 +318,77 @@
drawBorder: false, drawBorder: false,
} }
} }
},
plugins: {
legend: {
display: false,
},
} }
} }
}); });
var transaksi_data = { // var transaksi_data = {
labels: ['H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'H7',], // labels: ['H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'H7',],
datasets: [{ // datasets: [{
label: 'Tren Transaksi', // label: 'Tren Transaksi',
data: [100, 50, 300, 250, 100, 150, 2000], // data: [100, 50, 300, 250, 100, 150, 2000],
borderColor: '#16a75c',// 'rgb(75, 192, 192)', // borderColor: '#16a75c',// 'rgb(75, 192, 192)',
backgroundColor: '#16a75c8a', // backgroundColor: '#16a75c8a',
fill: true, // fill: true,
tension: 0.5 // tension: 0.5
}] // }]
}; // };
var ctx = document.getElementById('chartRealisasiCnt').getContext('2d'); // var ctx = document.getElementById('chartRealisasiCnt').getContext('2d');
var canvas = document.getElementById('chartRealisasiCnt'); // var canvas = document.getElementById('chartRealisasiCnt');
canvas.width = window.innerWidth; // canvas.width = window.innerWidth;
canvas.height = window.innerHeight / 3.38; // canvas.height = window.innerHeight / 3.38;
trxTrendChart = new Chart(ctx, { // trxTrendChart = new Chart(ctx, {
type: 'line', // type: 'line',
data: transaksi_data, // data: transaksi_data,
options: { // options: {
responsive: true, // responsive: true,
maintainAspectRatio: false, // maintainAspectRatio: false,
} // }
}); // });
var ctx = document.getElementById('chartKumulatif').getContext('2d'); // var ctx = document.getElementById('chartKumulatif').getContext('2d');
var canvas = document.getElementById('chartKumulatif'); // var canvas = document.getElementById('chartKumulatif');
canvas.width = window.innerWidth; // canvas.width = window.innerWidth;
canvas.height = window.innerHeight / 3.38; // canvas.height = window.innerHeight / 3.38;
var kumulatif_data = { // var kumulatif_data = {
labels: ['H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'H7',], // labels: ['H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'H7',],
datasets: [{ // datasets: [{
label: 'Tren Kumulatif', // label: 'Tren Kumulatif',
data: [100, 150, 400, 650, 900, 950, 1100], // data: [100, 150, 400, 650, 900, 950, 1100],
borderColor: '#ffb900', //'rgb(75, 192, 192)', // borderColor: '#ffb900', //'rgb(75, 192, 192)',
backgroundColor: '#debd68ad', // backgroundColor: '#debd68ad',
fill: true, // fill: true,
tension: 0.5 // tension: 0.5
}] // }]
}; // };
amtKumulatifChart = new Chart(ctx, { // amtKumulatifChart = new Chart(ctx, {
type: 'line', // type: 'line',
data: kumulatif_data, // data: kumulatif_data,
options: { // options: {
responsive: true, // responsive: true,
maintainAspectRatio: false, // maintainAspectRatio: false,
} // }
}); // });
var ctx = document.getElementById('chartKumulatifCnt').getContext('2d'); // var ctx = document.getElementById('chartKumulatifCnt').getContext('2d');
var canvas = document.getElementById('chartKumulatifCnt'); // var canvas = document.getElementById('chartKumulatifCnt');
canvas.width = window.innerWidth; // canvas.width = window.innerWidth;
canvas.height = window.innerHeight / 3.38; // canvas.height = window.innerHeight / 3.38;
trxKumulatifChart = new Chart(ctx, { // trxKumulatifChart = new Chart(ctx, {
type: 'line', // type: 'line',
data: kumulatif_data, // data: kumulatif_data,
options: { // options: {
responsive: true, // responsive: true,
maintainAspectRatio: false, // maintainAspectRatio: false,
} // }
}); // });
$("#rangeType").change(function () { $("#rangeType").change(function () {
trendChart(); trendChart();
...@@ -369,27 +420,27 @@ ...@@ -369,27 +420,27 @@
trendChart = function () { trendChart = function () {
if (rangeType.value == 1) { if (rangeType.value == 1) {
amtTrendChartData = newData.daily; amtTrendChartData = newData.daily;
trxTrendChartData = newData.dailyTrx; // trxTrendChartData = newData.dailyTrx;
amtKumulatifChartData = newData.dailyAcc; // amtKumulatifChartData = newData.dailyAcc;
trxKumulatifChartData = newData.dailyAccTrx; // trxKumulatifChartData = newData.dailyAccTrx;
} }
else if (rangeType.value == 2) { else if (rangeType.value == 2) {
amtTrendChartData = newData.weekly; amtTrendChartData = newData.weekly;
trxTrendChartData = newData.weeklyTrx; // trxTrendChartData = newData.weeklyTrx;
amtKumulatifChartData = newData.weeklyAcc; // amtKumulatifChartData = newData.weeklyAcc;
trxKumulatifChartData = newData.weeklyAccTrx; // trxKumulatifChartData = newData.weeklyAccTrx;
} }
else { else {
amtTrendChartData = newData.monthly; amtTrendChartData = newData.monthly;
trxTrendChartData = newData.monthlyTrx; // trxTrendChartData = newData.monthlyTrx;
amtKumulatifChartData = newData.monthlyAcc; // amtKumulatifChartData = newData.monthlyAcc;
trxKumulatifChartData = newData.monthlyAccTrx; // trxKumulatifChartData = newData.monthlyAccTrx;
} }
addData(amtTrendChart, amtTrendChartData); addData(amtTrendChart, amtTrendChartData);
addData(trxTrendChart, trxTrendChartData); // addData(trxTrendChart, trxTrendChartData);
addData(amtKumulatifChart, amtKumulatifChartData); // addData(amtKumulatifChart, amtKumulatifChartData);
addData(trxKumulatifChart, trxKumulatifChartData); // addData(trxKumulatifChart, trxKumulatifChartData);
} }
const formatter = new Intl.DateTimeFormat('id-ID', { dateStyle: 'full', timeStyle: 'medium' }); const formatter = new Intl.DateTimeFormat('id-ID', { dateStyle: 'full', timeStyle: 'medium' });
var today_el = document.getElementById('today'); var today_el = document.getElementById('today');
...@@ -407,8 +458,8 @@ ...@@ -407,8 +458,8 @@
}); });
$.fn.datarefresh = function () { $.fn.datarefresh = function () {
console.log("data_refresh"); // console.log("data_refresh");
console.log("${url}"); // console.log("${url}");
$.get("${url}", {}, function (data, status) { $.get("${url}", {}, function (data, status) {
if (status === "success") { if (status === "success") {
newData = data; newData = data;
...@@ -421,18 +472,19 @@ ...@@ -421,18 +472,19 @@
time.style.fontWeight = 'bold'; time.style.fontWeight = 'bold';
// removeData(pieChart); // removeData(pieChart);
addData(pieChart, newData.pie); addData(barChart, newData.realisasi);
trendChart(); trendChart();
tableRefresh();
} else { } else {
console.log("Request failed."); console.log("Request failed.");
} }
setTimeout(function () { setTimeout(function () {
console.log("timeout"); console.log("timeout");
$().datarefresh(); $().datarefresh();
}, 300000); }, 300000);
}).fail(function() { }).fail(function () {
setTimeout(function () { setTimeout(function () {
console.log("timeout"); console.log("timeout");
$().datarefresh(); $().datarefresh();
...@@ -445,6 +497,40 @@ ...@@ -445,6 +497,40 @@
// $().get_series(); // $().get_series();
} }
var tableRefresh = function () {
var table = $('#table1').DataTable(
{
"destroy": true,
"paging": false,
"searching": false,
"info": false,
"autoWidth": false,
"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, 5] }
]
}
);
table.clear();
newData.tabel.forEach(function (row) {
console.log(row);
table.row.add([
row.kode,
row.nama,
row.ketetapan.toLocaleString("id-ID"),
row.realisasi.toLocaleString("id-ID"),
row.sisa.toLocaleString("id-ID"),
row.persen.toFixed(2)
]);
});
table.draw();
}
// dataTable.rows().remove().draw();
</script> </script>
</html> </html>
\ No newline at end of file \ No newline at end of file
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!