Perubahan realisasi PBB

1 parent 65070991
......@@ -3,7 +3,7 @@ eis-pcpd,PCPD,/eis/pcpd,1,0,0
eis-pcpd-act,PCPD Act,/eis/pcpd/{act}/act,1,0
eis-pajak,Pajak,#,1,0,1
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-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
......
......@@ -9,7 +9,7 @@ from datatables import ColumnDT, DataTables
from sqlalchemy import func, and_, String
from sqlalchemy.sql.expression import cast
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
logger = logging.getLogger(__name__)
......@@ -450,6 +450,48 @@ class Views(BaseView):
}
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')
def view_app_act(self):
tahun = self.ses['tahun']
......@@ -466,6 +508,15 @@ class Views(BaseView):
return json_data
elif act == 'pbb':
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':
resp = self.get_bphtb_data()
elif act == 'webr':
......
......@@ -3,6 +3,7 @@
<metal:css fill-slot="css_files">
<link rel="stylesheet" href="${home}/eis/static/css/odometer-theme-plaza.css">
<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>
<style metal:fill-slot="styles">
</style>
......@@ -39,7 +40,7 @@
<h2 class="primary">
<b>Rp. <h2 class="odometer sub-odometer bold primary" id="ytd">0</h2></b>
</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>
......@@ -48,7 +49,7 @@
<div class="panel panel-default">
<div class="panel-heading">
<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>
</h5>
</div>
......@@ -139,7 +140,7 @@
<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">Realisasi
<h5 class="text-left bold">Ketetapan dan Realisasi per Kecamatan
<i class="fa fa-info-circle pull-right icon-color"></i>
</h5>
</div>
......@@ -196,54 +197,99 @@
<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/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>
<script metal:fill-slot="scripts">
var pieChart;
var barChart;
var amtTrendChart;
var trxTrendChart;
var amtKumulatifChart;
var trxKumulatifChart;
// var trxTrendChart;
// var amtKumulatifChart;
// var trxKumulatifChart;
var newData;
$(document).ready(function () {
var ctx = document.getElementById('chartPie').getContext('2d');
var canvas = document.getElementById('chartPie');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight / 4.2;
const pie_data = {
labels: [
'Pajak',
'Retribusi',
],
canvas.height = window.innerHeight / 2;
// const bar_data = {
// labels: [
// 'Ketetapan',
// '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: [{
data: [300, 100],
fill: false,
backgroundColor: [
'#16a75c', //'rgb(255, 99, 132)',
'#ffb900', // 'rgb(54, 162, 235)'
'rgba(255, 99, 132, 0.2)',
'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',
data: pie_data,
type: 'bar',
data: bar_data,
options: {
responsive: true,
maintainAspectRatio: false,
indexAxis: 'y',
// elements: {
// bar: {
// borderWidth: 2,
// }
// },
// responsive: true,
plugins: {
legend: {
position: 'bottom'
}
}
display: false,
// position: 'right',
},
// title: {
// display: true,
// text: 'Chart.js Horizontal Bar Chart'
// }
}
},
}
);
var ctx = document.getElementById('chartRealisasi').getContext('2d');
var canvas = document.getElementById('chartRealisasi');
canvas.width = window.innerWidth;
......@@ -272,72 +318,77 @@
drawBorder: false,
}
}
},
plugins: {
legend: {
display: false,
},
}
}
});
var transaksi_data = {
labels: ['H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'H7',],
datasets: [{
label: 'Tren Transaksi',
data: [100, 50, 300, 250, 100, 150, 2000],
borderColor: '#16a75c',// 'rgb(75, 192, 192)',
backgroundColor: '#16a75c8a',
fill: true,
tension: 0.5
}]
};
// var transaksi_data = {
// labels: ['H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'H7',],
// datasets: [{
// label: 'Tren Transaksi',
// data: [100, 50, 300, 250, 100, 150, 2000],
// borderColor: '#16a75c',// 'rgb(75, 192, 192)',
// backgroundColor: '#16a75c8a',
// fill: true,
// tension: 0.5
// }]
// };
var ctx = document.getElementById('chartRealisasiCnt').getContext('2d');
var canvas = document.getElementById('chartRealisasiCnt');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight / 3.38;
trxTrendChart = new Chart(ctx, {
type: 'line',
data: transaksi_data,
options: {
responsive: true,
maintainAspectRatio: false,
}
});
// var ctx = document.getElementById('chartRealisasiCnt').getContext('2d');
// var canvas = document.getElementById('chartRealisasiCnt');
// canvas.width = window.innerWidth;
// canvas.height = window.innerHeight / 3.38;
// trxTrendChart = new Chart(ctx, {
// type: 'line',
// data: transaksi_data,
// options: {
// responsive: true,
// maintainAspectRatio: false,
// }
// });
var ctx = document.getElementById('chartKumulatif').getContext('2d');
var canvas = document.getElementById('chartKumulatif');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight / 3.38;
var kumulatif_data = {
labels: ['H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'H7',],
datasets: [{
label: 'Tren Kumulatif',
data: [100, 150, 400, 650, 900, 950, 1100],
borderColor: '#ffb900', //'rgb(75, 192, 192)',
backgroundColor: '#debd68ad',
fill: true,
tension: 0.5
}]
};
// var ctx = document.getElementById('chartKumulatif').getContext('2d');
// var canvas = document.getElementById('chartKumulatif');
// canvas.width = window.innerWidth;
// canvas.height = window.innerHeight / 3.38;
// var kumulatif_data = {
// labels: ['H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'H7',],
// datasets: [{
// label: 'Tren Kumulatif',
// data: [100, 150, 400, 650, 900, 950, 1100],
// borderColor: '#ffb900', //'rgb(75, 192, 192)',
// backgroundColor: '#debd68ad',
// fill: true,
// tension: 0.5
// }]
// };
amtKumulatifChart = new Chart(ctx, {
type: 'line',
data: kumulatif_data,
options: {
responsive: true,
maintainAspectRatio: false,
}
});
// amtKumulatifChart = new Chart(ctx, {
// type: 'line',
// data: kumulatif_data,
// options: {
// responsive: true,
// maintainAspectRatio: false,
// }
// });
var ctx = document.getElementById('chartKumulatifCnt').getContext('2d');
var canvas = document.getElementById('chartKumulatifCnt');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight / 3.38;
trxKumulatifChart = new Chart(ctx, {
type: 'line',
data: kumulatif_data,
options: {
responsive: true,
maintainAspectRatio: false,
}
});
// var ctx = document.getElementById('chartKumulatifCnt').getContext('2d');
// var canvas = document.getElementById('chartKumulatifCnt');
// canvas.width = window.innerWidth;
// canvas.height = window.innerHeight / 3.38;
// trxKumulatifChart = new Chart(ctx, {
// type: 'line',
// data: kumulatif_data,
// options: {
// responsive: true,
// maintainAspectRatio: false,
// }
// });
$("#rangeType").change(function () {
trendChart();
......@@ -369,27 +420,27 @@
trendChart = function () {
if (rangeType.value == 1) {
amtTrendChartData = newData.daily;
trxTrendChartData = newData.dailyTrx;
amtKumulatifChartData = newData.dailyAcc;
trxKumulatifChartData = newData.dailyAccTrx;
// trxTrendChartData = newData.dailyTrx;
// amtKumulatifChartData = newData.dailyAcc;
// trxKumulatifChartData = newData.dailyAccTrx;
}
else if (rangeType.value == 2) {
amtTrendChartData = newData.weekly;
trxTrendChartData = newData.weeklyTrx;
amtKumulatifChartData = newData.weeklyAcc;
trxKumulatifChartData = newData.weeklyAccTrx;
// trxTrendChartData = newData.weeklyTrx;
// amtKumulatifChartData = newData.weeklyAcc;
// trxKumulatifChartData = newData.weeklyAccTrx;
}
else {
amtTrendChartData = newData.monthly;
trxTrendChartData = newData.monthlyTrx;
amtKumulatifChartData = newData.monthlyAcc;
trxKumulatifChartData = newData.monthlyAccTrx;
// trxTrendChartData = newData.monthlyTrx;
// amtKumulatifChartData = newData.monthlyAcc;
// trxKumulatifChartData = newData.monthlyAccTrx;
}
addData(amtTrendChart, amtTrendChartData);
addData(trxTrendChart, trxTrendChartData);
addData(amtKumulatifChart, amtKumulatifChartData);
addData(trxKumulatifChart, trxKumulatifChartData);
// addData(trxTrendChart, trxTrendChartData);
// addData(amtKumulatifChart, amtKumulatifChartData);
// addData(trxKumulatifChart, trxKumulatifChartData);
}
const formatter = new Intl.DateTimeFormat('id-ID', { dateStyle: 'full', timeStyle: 'medium' });
var today_el = document.getElementById('today');
......@@ -407,8 +458,8 @@
});
$.fn.datarefresh = function () {
console.log("data_refresh");
console.log("${url}");
// console.log("data_refresh");
// console.log("${url}");
$.get("${url}", {}, function (data, status) {
if (status === "success") {
newData = data;
......@@ -421,18 +472,19 @@
time.style.fontWeight = 'bold';
// removeData(pieChart);
addData(pieChart, newData.pie);
addData(barChart, newData.realisasi);
trendChart();
tableRefresh();
} else {
console.log("Request failed.");
}
setTimeout(function () {
console.log("timeout");
$().datarefresh();
}, 300000);
}).fail(function() {
}).fail(function () {
setTimeout(function () {
console.log("timeout");
$().datarefresh();
......@@ -445,6 +497,40 @@
// $().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>
</html>
\ 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!