perhitungan webr

1 parent 1e43b80c
......@@ -6,7 +6,7 @@ from opensipkd.base.models import (
)
from sqlalchemy import (Column, Integer, DateTime, String, Text, ForeignKey, Float,
Boolean, BigInteger, SmallInteger, desc, asc, Date, Time,
UniqueConstraint, func)
UniqueConstraint, func, literal_column)
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import engine_from_config
from opensipkd.tools import get_settings
......@@ -70,23 +70,6 @@ class PaymentPBB(PCBase, DefaultModel):
qry=qry.add_columns(col)
return qry
@classmethod
def sum_data(cls):
return PCDBSession.query(
func.to_char(cls.tgl_pembayaran_sppt,
'yyyy-mm-dd').label('tanggal'),
func.sum(cls.jml_sppt_yg_dibayar).label('bayar'),
func.sum(cls.denda_sppt).label('denda'))\
.group_by(func.to_char(cls.tgl_pembayaran_sppt, 'yyyy-mm-dd'))
@classmethod
def sum_daily(cls, length=0):
now = datetime.now()
tod = now.date
tom = tod + timedelta(days=1)
if length:
tod = tod-timedelta(days=length)
return cls.sum_data().filter(cls.tgl_pembayaran_sppt.between(tod, tom))
# baru dari db BPHTB
......@@ -119,16 +102,15 @@ class PaymentBPHTB(PCBase, CommonModel):
)
@classmethod
def sum_data(cls):
return PCDBSession.query(func.sum(cls.nilai_bphtb).label('bayar'),
func.sum('0').label('denda'))
def qry_sum(cls, columns=[]):
qry = PCDBSession.query(
func.sum(cls.nilai_bphtb).label('bayar'),
literal_column("0").label('denda'),
func.count(cls.id).label('trx')).select_from(cls)
for col in columns:
qry = qry.add_columns(col)
return qry
@classmethod
def sum_today(cls):
now = datetime.now()
tom = timedelta(now.date, days=1)
qry = cls.sum_data().filter(cls.tgl.between(now.date, tom))
return qry.first()
# baru PAD
......@@ -175,16 +157,14 @@ class PaymentPAD(PCBase, CommonModel):
)
@classmethod
def sum_data(cls):
return PCDBSession.query(func.sum(cls.jml_bayar).label('bayar'),
func.sum(cls.denda+cls.bunga).label('denda'))
@classmethod
def sum_today(cls):
now = datetime.now()
tom = timedelta(now.date, days=1)
qry = cls.sum_data().filter(cls.tgl.between(now.date, tom))
return qry.first()
def qry_sum(cls, columns=[]):
qry = PCDBSession.query(
func.sum(cls.jml_bayar).label('bayar'),
func.sum(cls.denda+cls.bunga).label('denda'),
func.count(cls.id).label('trx')).select_from(cls)
for col in columns:
qry = qry.add_columns(col)
return qry
# baru PAD
......@@ -218,16 +198,14 @@ class PaymentWEBR(PCBase, CommonModel):
)
@classmethod
def sum_data(cls):
return PCDBSession.query(func.sum(cls.jml_bayar).label('bayar'),
func.sum(cls.denda).label('denda'))
@classmethod
def sum_today(cls):
now = datetime.now()
tom = timedelta(now.date, days=1)
qry = cls.sum_data().filter(cls.tgl.between(now.date, tom))
return qry.first()
def qry_sum(cls, columns=[]):
qry = PCDBSession.query(
func.sum(cls.jml_bayar).label('bayar'),
func.sum(cls.denda).label('denda'),
func.count(cls.id).label('trx')).select_from(cls)
for col in columns:
qry = qry.add_columns(col)
return qry
def get_connection(settings):
......
......@@ -14,7 +14,7 @@ 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-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-retribusi,Retribusi,/eis/webr,1,0,1,,Views,view_webr,eis,pcpd.pt
eis-webr,Retribusi,/eis/webr,1,0,1,,pcpd,Views,view_webr,eis,pcpd.pt
eis,EIS,/eis,1,0,0
eis-carousel,Carousel,/eis/carousel,1,0,0
eis-carousel-act,Carousel Action,/eis/carousel/{act}/act,1,0
......
......@@ -12,6 +12,7 @@ from ..models.payment import PaymentPBB, PaymentPAD, PaymentBPHTB, PaymentWEBR
from datetime import timedelta
logger = logging.getLogger(__name__)
class Views(BaseView):
@view_config(route_name='eis-pcpd', renderer='templates/pcpd.pt',
permission='eis')
......@@ -41,12 +42,13 @@ class Views(BaseView):
"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):
def get_daily_data(self, table, field, today, filters):
columns = [field.label("step")]
qry = table.qry_sum(columns) \
.group_by(field)\
.order_by(field)
qry = qry.filter(filter)
# for i, f in enumerate(filters):
qry = qry.filter(filters)
daily = []
dailyTrx = []
dailyAcc = []
......@@ -57,7 +59,7 @@ class Views(BaseView):
bayar = r[0] or 0
denda = r[1] or 0
pokok = bayar - denda
tx=r[2] or 0
tx = r[2] or 0
daily.append((step, pokok))
dailyTrx.append((step, tx))
acc += pokok
......@@ -70,37 +72,200 @@ class Views(BaseView):
return amt, trx, daily, dailyTrx, dailyAcc, dailyAccTrx
def get_pbb_data(self):
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(
filter_exp = 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(
self.get_daily_data(PaymentPBB, field,
today.strftime("%Y-%m-%d"), filter_exp)
filter_exp = 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(
filter_exp = 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, field,
str(today.year), filter_exp)
field = func.to_char(PaymentPBB.tgl_pembayaran_sppt, 'IYYY-MM')
month, monthTrx, monthly, monthlyTrx, monthlyAcc, monthlyAccTrx = \
self.get_daily_data(PaymentPBB, field, None, filter_exp)
filter_exp = PaymentPBB.tgl_pembayaran_sppt.between(
today-timedelta(weeks=6), today)
week, weekTrx, weekly, weeklyTrx, weeklyAcc, weeklyAccTrx = \
self.get_daily_data(PaymentPBB, field, None, filter_exp)
field = func.to_char(PaymentPBB.tgl_pembayaran_sppt, 'YYYY-IW')
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,
"monthlyAccTrx": monthlyAccTrx,
}
def get_bphtb_data(self):
if log.root.level == logging.DEBUG:
today = datetime.strptime('2025-06-05', "%Y-%m-%d")
else:
today = datetime.now().date()
field = func.to_char(PaymentBPHTB.tgl, 'yyyy-mm-dd')
filter_exp = PaymentBPHTB.tgl.between(
today-timedelta(6), today)
amt, trx, daily, dailyTrx, dailyAcc, dailyAccTrx = \
self.get_daily_data(PaymentBPHTB, field,
today.strftime("%Y-%m-%d"), filter_exp)
filter_exp = PaymentBPHTB.tgl.between(
today-timedelta(days=6), today)
field = func.to_char(PaymentBPHTB.tgl, 'IYYY')
filter_exp = PaymentBPHTB.tgl.between(
datetime.strptime(f"{today.year}-01-01", "%Y-%m-%d"), today)
ytd, ytdTrx, yearly, yearlyTrx, yearlyAcc, yearlyAccTrx = \
self.get_daily_data(PaymentBPHTB, field,
str(today.year), filter_exp)
field = func.to_char(PaymentBPHTB.tgl, 'MM')
month, monthTrx, monthly, monthlyTrx, monthlyAcc, monthlyAccTrx = \
self.get_daily_data(PaymentBPHTB, field, None, filter_exp)
field = func.to_char(PaymentBPHTB.tgl, 'WW')
filter_exp = PaymentBPHTB.tgl.between(
today-timedelta(weeks=6), today)
week, weekTrx, weekly, weeklyTrx, weeklyAcc, weeklyAccTrx = \
self.get_daily_data(PaymentBPHTB, field, None, filter_exp)
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,
"monthlyAccTrx": monthlyAccTrx,
}
def get_pad_data(self, typ):
if log.root.level == logging.DEBUG:
today = datetime.strptime('2025-06-05', "%Y-%m-%d")
else:
today = datetime.now().date()
filter_ex = []
if typ == 'hotel':
filter_ex = [PaymentPAD.jenis_pajak == "PBJT - JASA PERHOTELAN",]
field = func.to_char(PaymentPAD.tgl, 'yyyy-mm-dd')
filter_exp = PaymentPAD.tgl.between(
today-timedelta(6), today)
amt, trx, daily, dailyTrx, dailyAcc, dailyAccTrx = \
self.get_daily_data(PaymentPAD, field,
today.strftime("%Y-%m-%d"), filter_exp)
filter_exp = PaymentPAD.tgl.between(
today-timedelta(days=6), today)
field = func.to_char(PaymentPAD.tgl, 'IYYY')
filter_exp = PaymentPAD.tgl.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))
self.get_daily_data(PaymentPAD, field, str(today.year), filter_exp)
field = func.to_char(PaymentPBB.tgl_pembayaran_sppt, 'IYYY-IM')
field = func.to_char(PaymentPAD.tgl, 'YYYY-MM')
month, monthTrx, monthly, monthlyTrx, monthlyAcc, monthlyAccTrx = \
self.get_daily_data(PaymentPBB, filter, field)
self.get_daily_data(PaymentPAD, field, None, filter_exp)
filter = PaymentPBB.tgl_pembayaran_sppt.between(
field = func.to_char(PaymentPAD.tgl, 'YYYY-WW')
filter_exp = PaymentPAD.tgl.between(
today-timedelta(weeks=6), today)
week, weekTrx, weekly, weeklyTrx, weeklyAcc, weeklyAccTrx = \
self.get_daily_data(PaymentPBB, filter, field)
self.get_daily_data(PaymentPAD, field, None, filter_exp)
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,
"monthlyAccTrx": monthlyAccTrx,
}
def get_webr_data(self):
if log.root.level == logging.DEBUG:
today = datetime.strptime('2025-06-05', "%Y-%m-%d")
else:
today = datetime.now().date()
filter_ex = []
# if typ == 'hotel':
# filter_ex = [PaymentPAD.jenis_pajak == "PBJT - JASA PERHOTELAN",]
field = func.to_char(PaymentWEBR.tgl, 'yyyy-mm-dd')
filter_exp = PaymentWEBR.tgl.between(
today-timedelta(6), today)
amt, trx, daily, dailyTrx, dailyAcc, dailyAccTrx = \
self.get_daily_data(PaymentWEBR, field,
today.strftime("%Y-%m-%d"), filter_exp)
filter_exp = PaymentWEBR.tgl.between(
today-timedelta(days=6), today)
field = func.to_char(PaymentWEBR.tgl, 'IYYY')
filter_exp = PaymentWEBR.tgl.between(
datetime.strptime(f"{today.year}-01-01", "%Y-%m-%d"), today)
ytd, ytdTrx, yearly, yearlyTrx, yearlyAcc, yearlyAccTrx = \
self.get_daily_data(PaymentWEBR, field, str(today.year), filter_exp)
field = func.to_char(PaymentWEBR.tgl, 'YYYY-MM')
month, monthTrx, monthly, monthlyTrx, monthlyAcc, monthlyAccTrx = \
self.get_daily_data(PaymentWEBR, field, None, filter_exp)
field = func.to_char(PaymentWEBR.tgl, 'YYYY-WW')
filter_exp = PaymentPAD.tgl.between(
today-timedelta(weeks=6), today)
week, weekTrx, weekly, weeklyTrx, weeklyAcc, weeklyAccTrx = \
self.get_daily_data(PaymentWEBR, field, None, filter_exp)
return {"today": amt,
"trx": trx,
......@@ -120,7 +285,7 @@ class Views(BaseView):
"monthly": monthly,
"monthlyTrx": monthlyTrx,
"monthlyAcc": monthlyAcc,
"monthtrAccTrx": monthlyAccTrx,
"monthlyAccTrx": monthlyAccTrx,
}
@view_config(route_name='eis-pcpd-act', renderer='json')
......@@ -139,8 +304,12 @@ class Views(BaseView):
return json_data
elif act == 'pbb':
resp = self.get_pbb_data()
elif act == 'bphtb':
resp = self.get_bphtb_data()
elif act == 'webr':
resp = self.get_webr_data()
else:
resp = self.get_dummy_data()
resp = self.get_pad_data(act)
resp["time"] = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
return resp
......@@ -189,152 +358,9 @@ class Views(BaseView):
"title": "Realisasi Pajak Air Tanah"}
def view_webr(self):
return {"module": 'webr'}
return {"module": 'webr',
"title": "Realisasi Retribusi"}
def view_opsen(self):
return {"module": 'opsen',
"title": "Opsen Pajak PKB dan BBNKB"}
# class eis(BaseView):
# def cek_value(self,value,devider,simbol):
# if value<devider:
# return "{0:,.0f}".format(value)
# else:
# return "{0:,.0f} {1}".format(value/devider,simbol)
# @view_config(route_name='eis', renderer='templates/eis.pt',
# permission='eis')
# def view_app(self):
# tahun = self.ses['tahun']
# 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 {}
# 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 {}
# 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,
# line_datas=line_datas, bar_datas=bar_datas,
# pie_datas=pie_datas, )#, datas=Eis.sum_order_id('2014'))
# @view_config(route_name='eis-act', renderer='json')
# def view_app_act(self):
# tahun = self.ses['tahun']
# req = self.req
# ses = req.session
# params = req.params
# id = 'id' in params and params['id'] or 0
# json_data = {}
# json_data['success']=False
# if req.matchdict['act']=='grid':
# rows = DBSession.query(Eis).filter(Eis.id==id)
# if not rows:
# return json_data
# for row in rows:
# row_dicted = row.to_dict()
# amt_hari = float(row_dicted['amt_hari'])
# amt_minggu = float(row_dicted['amt_minggu']) #+amt_hari
# amt_bulan = float(row_dicted['amt_bulan']) #+amt_hari
# amt_tahun = float(row_dicted['amt_tahun']) #+amt_bulan
# json_data['success']= True
# json_data['tahun'] = self.cek_value(amt_tahun,1, '')
# json_data['bulan'] = self.cek_value(amt_bulan,1, '')
# json_data['minggu'] = self.cek_value(amt_minggu,1, '')
# json_data['hari'] = self.cek_value(amt_hari,1, '')
# return json_data
# #######################################################################
# # GRAFIK LINE/BAR
# #######################################################################
# elif req.matchdict['act']=='linebar':
# rows = DBSession.query(Chart).filter(Chart.id==id).first()
# if not rows:
# return json_data
# json_data['label'] = rows.label.split(',')
# rows = DBSession.query(ChartItem).filter(ChartItem.chart_id==id).\
# order_by(ChartItem.id)
# 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,
# 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.value10/row.chart.devider,row.value11/row.chart.devider,row.value12/row.chart.devider,]
# json_data['success']= True
# return json_data
# #######################################################################
# # GRAFIK LINGKARAN
# #######################################################################
# elif req.matchdict['act']=='pie':
# rows = DBSession.query(Chart).filter(Chart.id==id).first()
# if not rows:
# return json_data
# json_data['label'] = rows.label.split(',')
# rows = DBSession.query(ChartItem).filter(ChartItem.chart_id==id).\
# order_by(ChartItem.id)
# json_data['rows'] = {}
# for row in rows:
# anama = {}
# anama['nama'] = row.nama
# anama['color'] = row.color
# anama ['highlight'] = row.highlight
# anama ['value'] = row.value_1/row.chart.devider
# json_data['rows'][row.nama] =anama
# json_data['success']= True
# return json_data
# elif req.matchdict['act']=='dasboard':
# # max_tahun = DBSession.query(func.max(Eis.tahun)).scalar()
# max_tahun = ses['tahun']
# subqx = DBSession.query(
# func.max(Eis.nama).label('nama'),
# func.sum(ChartItem.value_1+ChartItem.value_2+ChartItem.value_3+ChartItem.value_4+\
# ChartItem.value_5+ChartItem.value_6+ChartItem.value_7+ChartItem.value_8+ChartItem.value_9+\
# ChartItem.value10+ChartItem.value11+ChartItem.value12).label('target'),
# func.sum(Eis.amt_bulan).label('amt_bulan'),
# func.sum(Eis.amt_tahun).label('amt_tahun'),
# func.sum(
# (ChartItem.value_1+ChartItem.value_2+ChartItem.value_3+ChartItem.value_4+ChartItem.value_5+\
# ChartItem.value_6+ChartItem.value_7+ChartItem.value_8+ChartItem.value_9+ChartItem.value10+\
# ChartItem.value11+ChartItem.value12) - Eis.amt_tahun).label('sisa_target'),
# cast(func.round((func.sum(Eis.amt_tahun)/
# func.sum(ChartItem.value_1+ChartItem.value_2+ChartItem.value_3+ChartItem.value_4+\
# ChartItem.value_5+ChartItem.value_6+ChartItem.value_7+ChartItem.value_8+ChartItem.value_9+\
# ChartItem.value10+ChartItem.value11+ChartItem.value12))*100,2),String).label('persen')).\
# join(ChartItem, and_(func.trim(ChartItem.rekening_kd)==func.trim(Eis.kode),ChartItem.source_type=='target')).\
# join(Chart, and_(Chart.id == ChartItem.chart_id, Chart.chart_type == 'line')).\
# filter(Eis.tahun==max_tahun).\
# group_by(Eis.kode,Eis.nama,Eis.tahun).order_by(Eis.kode).subquery()
# subq = DBSession.query(
# (Eis.nama).label('nama'),
# (ChartItem.value_1*12).label('target'),
# (Eis.amt_bulan).label('amt_bulan'),
# (Eis.amt_tahun).label('amt_tahun'),
# ((ChartItem.value_1*12) - Eis.amt_tahun).label('sisa_target'),
# cast(func.round(((Eis.amt_tahun)/
# (ChartItem.value_1*12))*100,2),String).label('persen')).\
# join(ChartItem, and_(func.trim(ChartItem.rekening_kd)==func.trim(Eis.kode),ChartItem.source_type=='target')).\
# join(Chart, and_(Chart.id == ChartItem.chart_id, Chart.chart_type == 'line')).\
# filter(Eis.tahun==max_tahun).\
# order_by(Eis.kode).subquery()
# query = DBSession.query().select_from(subq)
# columns = [
# ColumnDT(subq.c.nama, mData="jenis_pajak"),
# ColumnDT(subq.c.target, mData="target"),
# ColumnDT(subq.c.amt_bulan, mData="realisasi_bulan_ini"),
# ColumnDT(subq.c.amt_tahun, mData="realisasi_sampai_dengan"),
# ColumnDT(subq.c.sisa_target, mData="sisa_target"),
# ColumnDT(subq.c.persen, mData="persen"),
# ]
# rowTable = DataTables(req.GET, query, columns)
# return rowTable.output_result()
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!