perhitungan pajak

1 parent 0630031e
kode,nama,path,status,type,is_menu,parent_id,file_name,class_name,func_name,permission,template kode,nama,path,status,type,is_menu,parent_id,file_name,class_name,func_name,permission,template
eis-pcpd,PCPD,/eis/pcpd,1,0,1 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,eis,pcpd.pt eis-pajak-kumulatif,Pajak,/eis/pajak,1,0,1,eis-pajak,pcpd,Views,view_pajak,eis,pcpd.pt
...@@ -10,6 +10,7 @@ eis-resto,Restoran,/eis/resto,1,0,1,eis-pajak,pcpd,Views,view_resto,eis,pcpd.pt ...@@ -10,6 +10,7 @@ eis-resto,Restoran,/eis/resto,1,0,1,eis-pajak,pcpd,Views,view_resto,eis,pcpd.pt
eis-hiburan,Hiburan,/eis/hiburan,1,0,1,eis-pajak,pcpd,Views,view_hiburan,eis,pcpd.pt eis-hiburan,Hiburan,/eis/hiburan,1,0,1,eis-pajak,pcpd,Views,view_hiburan,eis,pcpd.pt
eis-parkir,Parkir,/eis/parkir,1,0,1,eis-pajak,pcpd,Views,view_parkir,eis,pcpd.pt eis-parkir,Parkir,/eis/parkir,1,0,1,eis-pajak,pcpd,Views,view_parkir,eis,pcpd.pt
eis-ppju,PPJU,/eis/ppju,1,0,1,eis-pajak,pcpd,Views,view_ppju,eis,pcpd.pt eis-ppju,PPJU,/eis/ppju,1,0,1,eis-pajak,pcpd,Views,view_ppju,eis,pcpd.pt
eis-walet,Walet,/eis/walet,1,0,1,eis-pajak,pcpd,Views,view_walet,eis,pcpd.pt
eis-minerba,Minerba,/eis/minerba,1,0,1,eis-pajak,pcpd,Views,view_minerba,eis,pcpd.pt eis-minerba,Minerba,/eis/minerba,1,0,1,eis-pajak,pcpd,Views,view_minerba,eis,pcpd.pt
eis-reklame,Reklame,/eis/reklame,1,0,1,eis-pajak,pcpd,Views,view_reklame,eis,pcpd.pt 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-atd,Air Tanah,/eis/atd,1,0,1,eis-pajak,pcpd,Views,view_atd,eis,pcpd.pt
......
...@@ -12,6 +12,20 @@ from ..models.payment import PaymentPBB, PaymentPAD, PaymentBPHTB, PaymentWEBR ...@@ -12,6 +12,20 @@ from ..models.payment import PaymentPBB, PaymentPAD, PaymentBPHTB, PaymentWEBR
from datetime import timedelta from datetime import timedelta
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
PAD_TYP = {
"hotel": ["PBJT - JASA PERHOTELAN"],
"resto": ["RESTORAN", "PBJT - MAKANAN DAN/ATAU MINUMAN"],
"hiburan": ["PBJT - JASA KESENIAN DAN HIBURAN"],
"ppju": ["PBJT - TENAGA LISTRIK"],
"minerba": ["MINERAL BUKAN LOGAM DAN BATUAN"],
"opsen": ["OPSEN BBNKB", "OPSEN PKB"],
"parkir": ["PBJT - JASA PARKIR"],
"walet": ["PENGELOLAAN SARANG BURUNG WALET DAN SEJENISNYA"],
"atd": ["AIR TANAH"],
"reklame": ["REKLAME"],
"pbb": ["PBB", "BPHTB"]
}
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',
...@@ -42,13 +56,19 @@ class Views(BaseView): ...@@ -42,13 +56,19 @@ 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, field, today, filters): def get_daily_data(self, table, field, today, filters, typ=None):
columns = [field.label("step")] columns = [field.label("step")]
qry = table.qry_sum(columns) \ qry = table.qry_sum(columns) \
.group_by(field)\ .group_by(field)\
.order_by(field) .order_by(field)
# for i, f in enumerate(filters): # for i, f in enumerate(filters):
qry = qry.filter(filters) qry = qry.filter(filters)
if typ != None:
if typ == "pbb":
qry = qry.filter(table.jenis_pajak.notin_(PAD_TYP[typ]))
else:
qry = qry.filter(table.jenis_pajak.in_(PAD_TYP[typ]))
daily = [] daily = []
dailyTrx = [] dailyTrx = []
dailyAcc = [] dailyAcc = []
...@@ -94,16 +114,16 @@ class Views(BaseView): ...@@ -94,16 +114,16 @@ class Views(BaseView):
self.get_daily_data(PaymentPBB, field, self.get_daily_data(PaymentPBB, field,
str(today.year), filter_exp) str(today.year), filter_exp)
field = func.to_char(PaymentPBB.tgl_pembayaran_sppt, 'IYYY-MM') field = func.to_char(PaymentPBB.tgl_pembayaran_sppt, 'MM')
month, monthTrx, monthly, monthlyTrx, monthlyAcc, monthlyAccTrx = \ month, monthTrx, monthly, monthlyTrx, monthlyAcc, monthlyAccTrx = \
self.get_daily_data(PaymentPBB, field, None, filter_exp) self.get_daily_data(PaymentPBB, field, None, filter_exp)
field = func.to_char(PaymentPBB.tgl_pembayaran_sppt, 'WW')
filter_exp = PaymentPBB.tgl_pembayaran_sppt.between( filter_exp = PaymentPBB.tgl_pembayaran_sppt.between(
today-timedelta(weeks=6), today) today-timedelta(weeks=6), today)
week, weekTrx, weekly, weeklyTrx, weeklyAcc, weeklyAccTrx = \ week, weekTrx, weekly, weeklyTrx, weeklyAcc, weeklyAccTrx = \
self.get_daily_data(PaymentPBB, field, None, filter_exp) self.get_daily_data(PaymentPBB, field, None, filter_exp)
field = func.to_char(PaymentPBB.tgl_pembayaran_sppt, 'YYYY-IW')
return {"today": amt, return {"today": amt,
"trx": trx, "trx": trx,
"daily": daily, "daily": daily,
...@@ -183,15 +203,13 @@ class Views(BaseView): ...@@ -183,15 +203,13 @@ class Views(BaseView):
else: else:
today = datetime.now().date() today = datetime.now().date()
filter_ex = [] filter_ex = []
if typ == 'hotel':
filter_ex = [PaymentPAD.jenis_pajak == "PBJT - JASA PERHOTELAN",]
field = func.to_char(PaymentPAD.tgl, 'yyyy-mm-dd') field = func.to_char(PaymentPAD.tgl, 'yyyy-mm-dd')
filter_exp = PaymentPAD.tgl.between( filter_exp = PaymentPAD.tgl.between(
today-timedelta(6), today) today-timedelta(6), today)
amt, trx, daily, dailyTrx, dailyAcc, dailyAccTrx = \ amt, trx, daily, dailyTrx, dailyAcc, dailyAccTrx = \
self.get_daily_data(PaymentPAD, field, self.get_daily_data(PaymentPAD, field,
today.strftime("%Y-%m-%d"), filter_exp) today.strftime("%Y-%m-%d"), filter_exp, typ)
filter_exp = PaymentPAD.tgl.between( filter_exp = PaymentPAD.tgl.between(
today-timedelta(days=6), today) today-timedelta(days=6), today)
...@@ -199,17 +217,18 @@ class Views(BaseView): ...@@ -199,17 +217,18 @@ class Views(BaseView):
filter_exp = PaymentPAD.tgl.between( filter_exp = PaymentPAD.tgl.between(
datetime.strptime(f"{today.year}-01-01", "%Y-%m-%d"), today) datetime.strptime(f"{today.year}-01-01", "%Y-%m-%d"), today)
ytd, ytdTrx, yearly, yearlyTrx, yearlyAcc, yearlyAccTrx = \ ytd, ytdTrx, yearly, yearlyTrx, yearlyAcc, yearlyAccTrx = \
self.get_daily_data(PaymentPAD, field, str(today.year), filter_exp) self.get_daily_data(PaymentPAD, field, str(
today.year), filter_exp, typ)
field = func.to_char(PaymentPAD.tgl, 'YYYY-MM') field = func.to_char(PaymentPAD.tgl, 'MM')
month, monthTrx, monthly, monthlyTrx, monthlyAcc, monthlyAccTrx = \ month, monthTrx, monthly, monthlyTrx, monthlyAcc, monthlyAccTrx = \
self.get_daily_data(PaymentPAD, field, None, filter_exp) self.get_daily_data(PaymentPAD, field, None, filter_exp, typ)
field = func.to_char(PaymentPAD.tgl, 'YYYY-WW') field = func.to_char(PaymentPAD.tgl, 'WW')
filter_exp = PaymentPAD.tgl.between( filter_exp = PaymentPAD.tgl.between(
today-timedelta(weeks=6), today) today-timedelta(weeks=6), today)
week, weekTrx, weekly, weeklyTrx, weeklyAcc, weeklyAccTrx = \ week, weekTrx, weekly, weeklyTrx, weeklyAcc, weeklyAccTrx = \
self.get_daily_data(PaymentPAD, field, None, filter_exp) self.get_daily_data(PaymentPAD, field, None, filter_exp, typ)
return {"today": amt, return {"today": amt,
"trx": trx, "trx": trx,
...@@ -232,7 +251,6 @@ class Views(BaseView): ...@@ -232,7 +251,6 @@ class Views(BaseView):
"monthlyAccTrx": monthlyAccTrx, "monthlyAccTrx": monthlyAccTrx,
} }
def get_webr_data(self): def get_webr_data(self):
if log.root.level == logging.DEBUG: if log.root.level == logging.DEBUG:
today = datetime.strptime('2025-06-05', "%Y-%m-%d") today = datetime.strptime('2025-06-05', "%Y-%m-%d")
...@@ -255,7 +273,8 @@ class Views(BaseView): ...@@ -255,7 +273,8 @@ class Views(BaseView):
filter_exp = PaymentWEBR.tgl.between( filter_exp = PaymentWEBR.tgl.between(
datetime.strptime(f"{today.year}-01-01", "%Y-%m-%d"), today) datetime.strptime(f"{today.year}-01-01", "%Y-%m-%d"), today)
ytd, ytdTrx, yearly, yearlyTrx, yearlyAcc, yearlyAccTrx = \ ytd, ytdTrx, yearly, yearlyTrx, yearlyAcc, yearlyAccTrx = \
self.get_daily_data(PaymentWEBR, field, str(today.year), filter_exp) self.get_daily_data(PaymentWEBR, field,
str(today.year), filter_exp)
field = func.to_char(PaymentWEBR.tgl, 'YYYY-MM') field = func.to_char(PaymentWEBR.tgl, 'YYYY-MM')
month, monthTrx, monthly, monthlyTrx, monthlyAcc, monthlyAccTrx = \ month, monthTrx, monthly, monthlyTrx, monthlyAcc, monthlyAccTrx = \
...@@ -288,29 +307,121 @@ class Views(BaseView): ...@@ -288,29 +307,121 @@ class Views(BaseView):
"monthlyAccTrx": monthlyAccTrx, "monthlyAccTrx": monthlyAccTrx,
} }
@view_config(route_name='eis-pcpd-act', renderer='json') def loop_data(self, src, dst):
for key, val in enumerate(src):
found = False
for key2, val2 in enumerate(dst):
if val[0] == val2[0]:
found = True
dst[key2][1] += float(val[1])
if not found:
dst.append([val[0], float(val[1])])
dst.sort()
def get_pajak_data(self):
pbb=self.get_pbb_data()
bphtb=self.get_bphtb_data()
pdl=self.get_pad_data("pbb")
daily=[]
dailyTrx=[]
dailyAcc=[]
dailyAccTrx=[]
monthly=[]
monthlyTrx=[]
monthlyAcc=[]
monthlyAccTrx=[]
weekly=[]
weeklyTrx=[]
weeklyAcc=[]
weeklyAccTrx=[]
self.loop_data(pbb["daily"], daily)
self.loop_data(pbb["dailyTrx"], dailyTrx)
self.loop_data(pbb["dailyAcc"], dailyAcc)
self.loop_data(pbb["dailyAccTrx"], dailyAccTrx)
self.loop_data(pbb["monthly"], monthly)
self.loop_data(pbb["monthlyTrx"], monthlyTrx)
self.loop_data(pbb["monthlyAcc"], monthlyAcc)
self.loop_data(pbb["monthlyAccTrx"], monthlyAccTrx)
self.loop_data(pbb["weekly"], weekly)
self.loop_data(pbb["weeklyTrx"], weeklyTrx)
self.loop_data(pbb["weeklyAcc"], weeklyAcc)
self.loop_data(pbb["weeklyAccTrx"], weeklyAccTrx)
self.loop_data(bphtb["daily"], daily)
self.loop_data(bphtb["dailyTrx"], dailyTrx)
self.loop_data(bphtb["dailyAcc"], dailyAcc)
self.loop_data(bphtb["dailyAccTrx"], dailyAccTrx)
self.loop_data(bphtb["monthly"], monthly)
self.loop_data(bphtb["monthlyTrx"], monthlyTrx)
self.loop_data(bphtb["monthlyAcc"], monthlyAcc)
self.loop_data(bphtb["monthlyAccTrx"], monthlyAccTrx)
self.loop_data(bphtb["weekly"], weekly)
self.loop_data(bphtb["weeklyTrx"], weeklyTrx)
self.loop_data(bphtb["weeklyAcc"], weeklyAcc)
self.loop_data(bphtb["weeklyAccTrx"], weeklyAccTrx)
self.loop_data(pdl["daily"], daily)
self.loop_data(pdl["dailyTrx"], dailyTrx)
self.loop_data(pdl["dailyAcc"], dailyAcc)
self.loop_data(pdl["dailyAccTrx"], dailyAccTrx)
self.loop_data(pdl["monthly"], monthly)
self.loop_data(pdl["monthlyTrx"], monthlyTrx)
self.loop_data(pdl["monthlyAcc"], monthlyAcc)
self.loop_data(pdl["monthlyAccTrx"], monthlyAccTrx)
self.loop_data(pdl["weekly"], weekly)
self.loop_data(pdl["weeklyTrx"], weeklyTrx)
self.loop_data(pdl["weeklyAcc"], weeklyAcc)
self.loop_data(pdl["weeklyAccTrx"], weeklyAccTrx)
resp={"today": float(pbb.get("today", 0)) + float(bphtb.get("today", 0)) + float(pdl.get("today", 0)),
"trx": float(pbb.get("trx", 0)) + float(bphtb.get("trx", 0)) + float(pdl.get("trx", 0)),
"daily": daily,
"dailyTrx": dailyTrx,
"dailyAcc": dailyAcc,
"dailyAccTrx": dailyAccTrx,
"ytd": float(pbb.get("ytd", 0)) + float(bphtb.get("ytd", 0)) + float(pdl.get("ytd", 0)),
"trxYtd": float(pbb.get("trxYtd", 0)) + float(bphtb.get("trxYtd", 0)) + float(pdl.get("trxYtd", 0)),
"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,
}
return resp
@ 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()
elif act == 'bphtb': elif act == 'bphtb':
resp = self.get_bphtb_data() resp=self.get_bphtb_data()
elif act == 'webr': elif act == 'webr':
resp = self.get_webr_data() resp=self.get_webr_data()
elif act == 'pajak':
resp=self.get_pajak_data()
else: else:
resp = self.get_pad_data(act) resp=self.get_pad_data(act)
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):
...@@ -364,3 +475,7 @@ class Views(BaseView): ...@@ -364,3 +475,7 @@ class Views(BaseView):
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"}
def view_walet(self):
return {"module": 'walet',
"title": "Pajak Sarang Burung Walet"}
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!