Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
aa.gusti
/
eis
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 635d16bc
authored
Jul 03, 2025
by
aa.gustiana@gmail.com
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
Perubahan realisasi PBB
1 parent
65070991
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
240 additions
and
103 deletions
eispajak/scripts/data/routes.csv
eispajak/views/pcpd.py
eispajak/views/templates/pbb.pt
eispajak/scripts/data/routes.csv
View file @
635d16b
...
...
@@ -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,p
cpd
.pt
eis-pbb,PBB,/eis/pbb,1,0,1,eis-pajak,pcpd,Views,view_pbb,eis,p
bb
.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
...
...
eispajak/views/pcpd.py
View file @
635d16b
...
...
@@ -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'
:
...
...
eispajak/views/templates/pbb.pt
View file @
635d16b
...
...
@@ -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
pie
Chart
;
var
bar
Chart
;
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
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment