perhitungan pbb

1 parent 68251610
from datetime import timedelta, datetime from datetime import timedelta, datetime
import sys import sys
from opensipkd.base.models import ( from opensipkd.base.models import (
Base, DBSession, CommonModel, DefaultModel, NamaModel, KodeModel, DBSession, Base, CommonModel, DefaultModel, NamaModel, KodeModel,
TABLE_ARGS TABLE_ARGS
) )
from sqlalchemy import (Column, Integer, DateTime, String, Text, ForeignKey, Float, from sqlalchemy import (Column, Integer, DateTime, String, Text, ForeignKey, Float,
...@@ -59,9 +59,20 @@ class PaymentPBB(PCBase, DefaultModel): ...@@ -59,9 +59,20 @@ class PaymentPBB(PCBase, DefaultModel):
UniqueConstraint('stan', 'ntb'), UniqueConstraint('stan', 'ntb'),
) )
@classmethod
def qry_sum(cls, columns=[]):
qry = PCDBSession.query(
func.sum(cls.jml_sppt_yg_dibayar).label('bayar'),
func.sum(cls.denda_sppt).label('denda'),
func.count(cls.id).label('trx')).select_from(cls)
for col in columns:
qry=qry.add_columns(col)
return qry
@classmethod @classmethod
def sum_data(cls): def sum_data(cls):
return DBSession.query( return PCDBSession.query(
func.to_char(cls.tgl_pembayaran_sppt, func.to_char(cls.tgl_pembayaran_sppt,
'yyyy-mm-dd').label('tanggal'), 'yyyy-mm-dd').label('tanggal'),
func.sum(cls.jml_sppt_yg_dibayar).label('bayar'), func.sum(cls.jml_sppt_yg_dibayar).label('bayar'),
...@@ -109,7 +120,7 @@ class PaymentBPHTB(PCBase, CommonModel): ...@@ -109,7 +120,7 @@ class PaymentBPHTB(PCBase, CommonModel):
@classmethod @classmethod
def sum_data(cls): def sum_data(cls):
return DBSession.query(func.sum(cls.nilai_bphtb).label('bayar'), return PCDBSession.query(func.sum(cls.nilai_bphtb).label('bayar'),
func.sum('0').label('denda')) func.sum('0').label('denda'))
@classmethod @classmethod
...@@ -165,7 +176,7 @@ class PaymentPAD(PCBase, CommonModel): ...@@ -165,7 +176,7 @@ class PaymentPAD(PCBase, CommonModel):
@classmethod @classmethod
def sum_data(cls): def sum_data(cls):
return DBSession.query(func.sum(cls.jml_bayar).label('bayar'), return PCDBSession.query(func.sum(cls.jml_bayar).label('bayar'),
func.sum(cls.denda+cls.bunga).label('denda')) func.sum(cls.denda+cls.bunga).label('denda'))
@classmethod @classmethod
...@@ -208,7 +219,7 @@ class PaymentWEBR(PCBase, CommonModel): ...@@ -208,7 +219,7 @@ class PaymentWEBR(PCBase, CommonModel):
@classmethod @classmethod
def sum_data(cls): def sum_data(cls):
return DBSession.query(func.sum(cls.jml_bayar).label('bayar'), return PCDBSession.query(func.sum(cls.jml_bayar).label('bayar'),
func.sum(cls.denda).label('denda')) func.sum(cls.denda).label('denda'))
@classmethod @classmethod
......
from types import NoneType
from pyramid.view import ( from pyramid.view import (
view_config, view_config,
) )
from ..views import BaseView from ..views import BaseView
from ..models import * from ..models import *
from ..models.eis import Eis, Chart, ChartItem, Slide from ..models.eis import Eis, Chart, ChartItem, Slide
...@@ -8,22 +9,25 @@ from datatables import ColumnDT, DataTables ...@@ -8,22 +9,25 @@ 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 datetime import timedelta
logger = logging.getLogger(__name__)
class Views(BaseView): class Views(BaseView):
@view_config(route_name='eis-pcpd', renderer='templates/pcpd.pt', @view_config(route_name='eis-pcpd', renderer='templates/pcpd.pt',
permission='eis') permission='eis')
def view_app(self): def view_app(self):
return{"module":"pad", return {"module": "pad",
"title" : "Realisasi Pajak dan Retribusi Daerah"} "title": "Realisasi Pajak dan Retribusi Daerah"}
def get_dummy_data(self): def get_dummy_data(self):
return {"today":1000, return {"today": 1000,
"trx":155, "trx": 155,
"ytd":10000, "ytd": 10000,
"trxYtd":1550, "trxYtd": 1550,
"pie": [("I", 100, '#16a75c'), ("II", 200, '#ffb900'), "pie": [("I", 100, '#16a75c'), ("II", 200, '#ffb900'),
("III", 300, '#133132'), ("IV", 200,'#123456'), ("III", 300, '#133132'), ("IV", 200, '#123456'),
("V", 100,'#545355')], ("V", 100, '#545355')],
"daily": [("I", 100), ("II", 200), ("III", 300), ("IV", 200), ("V", 100), ("VI", 100),("VII",700)], "daily": [("I", 100), ("II", 200), ("III", 300), ("IV", 200), ("V", 100), ("VI", 100), ("VII", 700)],
"dailyTrx": [("I", 50), ("II", 25), ("III", 10), ("IV", 10), ("V", 50), ("VI", 34), ("VII", 35)], "dailyTrx": [("I", 50), ("II", 25), ("III", 10), ("IV", 10), ("V", 50), ("VI", 34), ("VII", 35)],
"dailyAcc": [("I", 100), ("II", 200), ("III", 300), ("IV", 200), ("V", 100), ("VI", 100), ("VII", 700)], "dailyAcc": [("I", 100), ("II", 200), ("III", 300), ("IV", 200), ("V", 100), ("VI", 100), ("VII", 700)],
"dailyAccTrx": [("I", 100), ("II", 200), ("III", 300), ("IV", 200), ("V", 100), ("VI", 100), ("VII", 700)], "dailyAccTrx": [("I", 100), ("II", 200), ("III", 300), ("IV", 200), ("V", 100), ("VI", 100), ("VII", 700)],
...@@ -37,29 +41,109 @@ class Views(BaseView): ...@@ -37,29 +41,109 @@ class Views(BaseView):
"monthtrAccTrx": [("JAN", 100), ("FEB", 200), ("MAR", 300), ("APR", 200), ("MAY", 100), ("JUN", 100), ("JUL", 700)], "monthtrAccTrx": [("JAN", 100), ("FEB", 200), ("MAR", 300), ("APR", 200), ("MAY", 100), ("JUN", 100), ("JUL", 700)],
} }
def get_daily_data(self, table, filter, field=None, today=None):
columns = [field.label("step")]
qry = table.qry_sum(columns) \
.group_by(field)\
.order_by(field)
qry = qry.filter(filter)
daily = []
dailyTrx = []
dailyAcc = []
dailyAccTrx = []
amt = trx = acc = accTrx = 0
for r in qry:
step = r[3]
bayar = r[0] or 0
denda = r[1] or 0
pokok = bayar - denda
tx=r[2] or 0
daily.append((step, pokok))
dailyTrx.append((step, tx))
acc += pokok
accTrx += tx
dailyAcc.append((step, acc))
dailyAccTrx.append((step, accTrx))
if step == today:
amt = pokok
trx = tx
return amt, trx, daily, dailyTrx, dailyAcc, dailyAccTrx
def get_pbb_data(self): def get_pbb_data(self):
return self.get_dummy_data() log.debug("YYYYY")
logger.debug("XXXX")
if log.root.level == logging.DEBUG:
today = datetime.strptime('2025-06-05', "%Y-%m-%d")
else:
today = datetime.now().date()
field = func.to_char(PaymentPBB.tgl_pembayaran_sppt, 'yyyy-mm-dd')
filter = PaymentPBB.tgl_pembayaran_sppt.between(
today-timedelta(6), today)
amt, trx, daily, dailyTrx, dailyAcc, dailyAccTrx = \
self.get_daily_data(PaymentPBB, filter, field,
today.strftime("%Y-%m-%d"))
filter = PaymentPBB.tgl_pembayaran_sppt.between(
today-timedelta(days=6), today)
field = func.to_char(PaymentPBB.tgl_pembayaran_sppt, 'IYYY')
filter = PaymentPBB.tgl_pembayaran_sppt.between(
datetime.strptime(f"{today.year}-01-01", "%Y-%m-%d"), today)
ytd, ytdTrx, yearly, yearlyTrx, yearlyAcc, yearlyAccTrx = \
self.get_daily_data(PaymentPBB, filter, field,str(today.year))
field = func.to_char(PaymentPBB.tgl_pembayaran_sppt, 'IYYY-IM')
month, monthTrx, monthly, monthlyTrx, monthlyAcc, monthlyAccTrx = \
self.get_daily_data(PaymentPBB, filter, field)
filter = PaymentPBB.tgl_pembayaran_sppt.between(
today-timedelta(weeks=6), today)
week, weekTrx, weekly, weeklyTrx, weeklyAcc, weeklyAccTrx = \
self.get_daily_data(PaymentPBB, filter, field)
field = func.to_char(PaymentPBB.tgl_pembayaran_sppt, 'YYYY-MM')
return {"today": amt,
"trx": trx,
"daily": daily,
"dailyTrx": dailyTrx,
"dailyAcc": dailyAcc,
"dailyAccTrx": dailyAccTrx,
"ytd": ytd,
"trxYtd": ytdTrx,
"pie": [("I", 100, '#16a75c'), ("II", 200, '#ffb900'),
("III", 300, '#133132'), ("IV", 200, '#123456'),
("V", 100, '#545355')],
"weekly": weekly,
"weeklyTrx": weeklyTrx,
"weeklyAcc": weeklyAcc,
"weeklyAccTrx": weeklyAccTrx,
"monthly": monthly,
"monthlyTrx": monthlyTrx,
"monthlyAcc": monthlyAcc,
"monthtrAccTrx": monthlyAccTrx,
}
@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']
req = self.req req = self.req
ses = req.session ses = req.session
params = req.params params = req.params
id = 'id' in params and params['id'] or 0 id = 'id' in params and params['id'] or 0
json_data = {} json_data = {}
json_data['success']=False json_data['success'] = False
act = req.matchdict['act'] act = req.matchdict['act']
if act =='grid': if act == 'grid':
rows = DBSession.query(Eis).filter(Eis.id==id) rows = DBSession.query(Eis).filter(Eis.id == id)
if not rows: if not rows:
return json_data return json_data
elif act=='pbb': elif act == 'pbb':
resp = self.get_pbb_data() resp = self.get_pbb_data()
else: else:
resp = self.get_dummy_data() resp = self.get_dummy_data()
resp["time"]=datetime.now().strftime("%Y-%m-%d %H:%M:%S") resp["time"] = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
return resp return resp
def view_pajak(self): def view_pajak(self):
return {"module": 'pajak', return {"module": 'pajak',
"title": "Realisasi Pajak Daerah"} "title": "Realisasi Pajak Daerah"}
...@@ -67,31 +151,35 @@ class Views(BaseView): ...@@ -67,31 +151,35 @@ class Views(BaseView):
def view_pbb(self): def view_pbb(self):
return {"module": 'pbb', return {"module": 'pbb',
"title": "Realisasi Pajak Bumi dan Bangunan P2"} "title": "Realisasi Pajak Bumi dan Bangunan P2"}
def view_bphtb(self): def view_bphtb(self):
return {"module": 'bphtb', return {"module": 'bphtb',
"title": "Realisasi BPHTB"} "title": "Realisasi BPHTB"}
def view_hotel(self): def view_hotel(self):
return {"module": 'hotel', return {"module": 'hotel',
"title": "Realisasi Pajak Hotel"} "title": "Realisasi Pajak Hotel"}
def view_resto(self): def view_resto(self):
return {"module": 'resto', return {"module": 'resto',
"title": "Realisasi Pajak Restoran"} "title": "Realisasi Pajak Restoran"}
def view_parkir(self): def view_parkir(self):
return {"module": 'parkir', return {"module": 'parkir',
"title": "Realisasi Pajak Parkir"} "title": "Realisasi Pajak Parkir"}
def view_hiburan(self): def view_hiburan(self):
return {"module": 'hiburan', return {"module": 'hiburan',
"title": "Realisasi Pajak Hiburan"} "title": "Realisasi Pajak Hiburan"}
def view_ppju(self): def view_ppju(self):
return {"module": 'ppju', return {"module": 'ppju',
"title": "Realisasi Pajak Penerangan Jalan Umum"} "title": "Realisasi Pajak Penerangan Jalan Umum"}
def view_minerba(self): def view_minerba(self):
return {"module": 'minerba', return {"module": 'minerba',
"title": "Realisasi Pajak Minerba"} "title": "Realisasi Pajak Minerba"}
def view_reklame(self): def view_reklame(self):
return {"module": 'reklame', return {"module": 'reklame',
"title": "Realisasi Pajak Reklame"} "title": "Realisasi Pajak Reklame"}
...@@ -99,10 +187,10 @@ class Views(BaseView): ...@@ -99,10 +187,10 @@ class Views(BaseView):
def view_atd(self): def view_atd(self):
return {"module": 'atd', return {"module": 'atd',
"title": "Realisasi Pajak Air Tanah"} "title": "Realisasi Pajak Air Tanah"}
def view_webr(self): def view_webr(self):
return {"module": 'webr'} return {"module": 'webr'}
def view_opsen(self): def view_opsen(self):
return {"module": 'opsen', return {"module": 'opsen',
"title": "Opsen Pajak PKB dan BBNKB"} "title": "Opsen Pajak PKB dan BBNKB"}
...@@ -112,19 +200,19 @@ class Views(BaseView): ...@@ -112,19 +200,19 @@ class Views(BaseView):
# if value<devider: # if value<devider:
# return "{0:,.0f}".format(value) # return "{0:,.0f}".format(value)
# else: # else:
# return "{0:,.0f} {1}".format(value/devider,simbol) # return "{0:,.0f} {1}".format(value/devider,simbol)
# @view_config(route_name='eis', renderer='templates/eis.pt', # @view_config(route_name='eis', renderer='templates/eis.pt',
# permission='eis') # permission='eis')
# def view_app(self): # def view_app(self):
# tahun = self.ses['tahun'] # tahun = self.ses['tahun']
# datas = DBSession.query(Slide).filter(Slide.status==1).order_by(Slide.order_id) or {} # datas = DBSession.query(Slide).filter(Slide.status==1).order_by(Slide.order_id) or {}
# tab_datas = DBSession.query(Slide).filter(Slide.source_type=='grid').order_by(Slide.order_id) or {} # tab_datas = DBSession.query(Slide).filter(Slide.source_type=='grid').order_by(Slide.order_id) or {}
# line_datas = DBSession.query(Slide).filter(Slide.source_type=='chart-line').order_by(Slide.order_id)or {} # line_datas = DBSession.query(Slide).filter(Slide.source_type=='chart-line').order_by(Slide.order_id)or {}
# bar_datas = DBSession.query(Slide).filter(Slide.source_type=='chart-bar').order_by(Slide.order_id)or {} # bar_datas = DBSession.query(Slide).filter(Slide.source_type=='chart-bar').order_by(Slide.order_id)or {}
# pie_datas = DBSession.query(Slide).filter(Slide.source_type=='chart-pie').order_by(Slide.order_id)or {} # pie_datas = DBSession.query(Slide).filter(Slide.source_type=='chart-pie').order_by(Slide.order_id)or {}
# return dict(project='EIS', datas=datas, tab_datas=tab_datas, # return dict(project='EIS', datas=datas, tab_datas=tab_datas,
# line_datas=line_datas, bar_datas=bar_datas, # line_datas=line_datas, bar_datas=bar_datas,
# pie_datas=pie_datas, )#, datas=Eis.sum_order_id('2014')) # pie_datas=pie_datas, )#, datas=Eis.sum_order_id('2014'))
...@@ -138,12 +226,12 @@ class Views(BaseView): ...@@ -138,12 +226,12 @@ class Views(BaseView):
# id = 'id' in params and params['id'] or 0 # id = 'id' in params and params['id'] or 0
# json_data = {} # json_data = {}
# json_data['success']=False # json_data['success']=False
# if req.matchdict['act']=='grid': # if req.matchdict['act']=='grid':
# rows = DBSession.query(Eis).filter(Eis.id==id) # rows = DBSession.query(Eis).filter(Eis.id==id)
# if not rows: # if not rows:
# return json_data # return json_data
# for row in rows: # for row in rows:
# row_dicted = row.to_dict() # row_dicted = row.to_dict()
# amt_hari = float(row_dicted['amt_hari']) # amt_hari = float(row_dicted['amt_hari'])
...@@ -155,38 +243,38 @@ class Views(BaseView): ...@@ -155,38 +243,38 @@ class Views(BaseView):
# json_data['bulan'] = self.cek_value(amt_bulan,1, '') # json_data['bulan'] = self.cek_value(amt_bulan,1, '')
# json_data['minggu'] = self.cek_value(amt_minggu,1, '') # json_data['minggu'] = self.cek_value(amt_minggu,1, '')
# json_data['hari'] = self.cek_value(amt_hari,1, '') # json_data['hari'] = self.cek_value(amt_hari,1, '')
# return json_data # return json_data
# ####################################################################### # #######################################################################
# # GRAFIK LINE/BAR # # GRAFIK LINE/BAR
# ####################################################################### # #######################################################################
# elif req.matchdict['act']=='linebar': # elif req.matchdict['act']=='linebar':
# rows = DBSession.query(Chart).filter(Chart.id==id).first() # rows = DBSession.query(Chart).filter(Chart.id==id).first()
# if not rows: # if not rows:
# return json_data # return json_data
# json_data['label'] = rows.label.split(',') # json_data['label'] = rows.label.split(',')
# rows = DBSession.query(ChartItem).filter(ChartItem.chart_id==id).\ # rows = DBSession.query(ChartItem).filter(ChartItem.chart_id==id).\
# order_by(ChartItem.id) # order_by(ChartItem.id)
# for row in rows: # for row in rows:
# json_data[row.source_type] = [row.value_1/row.chart.devider,row.value_2/row.chart.devider,row.value_3/row.chart.devider, # json_data[row.source_type] = [row.value_1/row.chart.devider,row.value_2/row.chart.devider,row.value_3/row.chart.devider,
# row.value_4/row.chart.devider,row.value_5/row.chart.devider,row.value_6/row.chart.devider, # row.value_4/row.chart.devider,row.value_5/row.chart.devider,row.value_6/row.chart.devider,
# row.value_7/row.chart.devider,row.value_8/row.chart.devider,row.value_9/row.chart.devider, # row.value_7/row.chart.devider,row.value_8/row.chart.devider,row.value_9/row.chart.devider,
# row.value10/row.chart.devider,row.value11/row.chart.devider,row.value12/row.chart.devider,] # row.value10/row.chart.devider,row.value11/row.chart.devider,row.value12/row.chart.devider,]
# json_data['success']= True # json_data['success']= True
# return json_data # return json_data
# ####################################################################### # #######################################################################
# # GRAFIK LINGKARAN # # GRAFIK LINGKARAN
# ####################################################################### # #######################################################################
# elif req.matchdict['act']=='pie': # elif req.matchdict['act']=='pie':
# rows = DBSession.query(Chart).filter(Chart.id==id).first() # rows = DBSession.query(Chart).filter(Chart.id==id).first()
# if not rows: # if not rows:
# return json_data # return json_data
# json_data['label'] = rows.label.split(',') # json_data['label'] = rows.label.split(',')
# rows = DBSession.query(ChartItem).filter(ChartItem.chart_id==id).\ # rows = DBSession.query(ChartItem).filter(ChartItem.chart_id==id).\
# order_by(ChartItem.id) # order_by(ChartItem.id)
...@@ -197,8 +285,8 @@ class Views(BaseView): ...@@ -197,8 +285,8 @@ class Views(BaseView):
# anama['color'] = row.color # anama['color'] = row.color
# anama ['highlight'] = row.highlight # anama ['highlight'] = row.highlight
# anama ['value'] = row.value_1/row.chart.devider # anama ['value'] = row.value_1/row.chart.devider
# json_data['rows'][row.nama] =anama # json_data['rows'][row.nama] =anama
# json_data['success']= True # json_data['success']= True
# return json_data # return json_data
...@@ -250,6 +338,3 @@ class Views(BaseView): ...@@ -250,6 +338,3 @@ class Views(BaseView):
# ] # ]
# rowTable = DataTables(req.GET, query, columns) # rowTable = DataTables(req.GET, query, columns)
# return rowTable.output_result() # return rowTable.output_result()
...@@ -349,6 +349,7 @@ ...@@ -349,6 +349,7 @@
$("#rangeType").change(function () { $("#rangeType").change(function () {
trendChart(); trendChart();
}); });
$().datarefresh();
}); });
function addData(chart, data) { function addData(chart, data) {
labels = []; labels = [];
...@@ -415,6 +416,11 @@ ...@@ -415,6 +416,11 @@
} else { } else {
console.log("Request failed."); console.log("Request failed.");
} }
setTimeout(function () {
console.log("timeout");
$().datarefresh();
}, 15000);
}); });
// $().get_realisasi(); // $().get_realisasi();
// $().get_harian(); // $().get_harian();
...@@ -423,10 +429,6 @@ ...@@ -423,10 +429,6 @@
} }
setTimeout(function () {
console.log("timeout");
$().datarefresh();
}, 1);
</script> </script>
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!