Refactor connection setup and enhance view initialization with session management

1 parent 61e40e7b
...@@ -286,7 +286,7 @@ class Targets(PCBase, DefaultModel): ...@@ -286,7 +286,7 @@ class Targets(PCBase, DefaultModel):
def get_connection(settings): def get_connection(settings):
url = 'pcpd.url' in settings and settings['pcpd.url'] and 'pcpd.' or 'sqlalchemy.' url = 'pcpd.url' in settings and settings['pcpd.url'] and 'pcpd.' or 'sqlalchemy.'
engine = engine_from_config(settings, url, pool_pre_ping=True) engine = engine_from_config(settings, url)
PCDBSession.configure(bind=engine) PCDBSession.configure(bind=engine)
PCBase.metadata.bind = engine PCBase.metadata.bind = engine
return engine return engine
...@@ -294,7 +294,6 @@ def get_connection(settings): ...@@ -294,7 +294,6 @@ def get_connection(settings):
def includeme(config): def includeme(config):
settings = get_settings() settings = get_settings()
get_connection(settings) get_connection(settings)
......
...@@ -11,6 +11,8 @@ from sqlalchemy.sql.expression import cast ...@@ -11,6 +11,8 @@ from sqlalchemy.sql.expression import cast
from ..models.payment import PaymentPBB, PaymentPAD, PaymentBPHTB, PaymentWEBR, Targets from ..models.payment import PaymentPBB, PaymentPAD, PaymentBPHTB, PaymentWEBR, Targets
from opensipkd.pbb.monitoring.models import PembayaranSppt, Kecamatan, Kelurahan, Sppt from opensipkd.pbb.monitoring.models import PembayaranSppt, Kecamatan, Kelurahan, Sppt
from datetime import timedelta from datetime import timedelta
from ..models.payment import PCDBSession
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
PAD_TYP = { PAD_TYP = {
...@@ -120,6 +122,10 @@ jenis_pajak = { ...@@ -120,6 +122,10 @@ jenis_pajak = {
class Views(BaseView): class Views(BaseView):
def __init__(self, request):
super().__init__(request)
self.db_session = PCDBSession
@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):
...@@ -153,14 +159,14 @@ class Views(BaseView): ...@@ -153,14 +159,14 @@ class Views(BaseView):
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):
qry = qry.filter(filters) qry = qry.filter(filters)
if typ != None: if typ != None:
if typ == "pajak": if typ == "pajak":
qry = qry.filter(table.jenis_pajak.notin_(PAD_TYP['pbb'])) qry = qry.filter(table.jenis_pajak.notin_(PAD_TYP['pbb']))
else: else:
qry = qry.filter(table.jenis_pajak.in_(PAD_TYP[typ])) qry = qry.filter(table.jenis_pajak.in_(PAD_TYP[typ]))
daily = [] daily = []
dailyTrx = [] dailyTrx = []
dailyAcc = [] dailyAcc = []
...@@ -183,66 +189,15 @@ class Views(BaseView): ...@@ -183,66 +189,15 @@ class Views(BaseView):
trx = tx trx = tx
return amt, trx, daily, dailyTrx, dailyAcc, dailyAccTrx return amt, trx, daily, dailyTrx, dailyAcc, dailyAccTrx
# def get_pbb_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(PaymentPBB.tgl_pembayaran_sppt, 'yyyy-mm-dd')
# filter_exp = PaymentPBB.tgl_pembayaran_sppt.between(
# today-timedelta(6), today)
# amt, trx, daily, dailyTrx, dailyAcc, dailyAccTrx = \
# 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_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, 'MM')
# month, monthTrx, monthly, monthlyTrx, monthlyAcc, monthlyAccTrx = \
# 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(
# today-timedelta(weeks=6), today)
# week, weekTrx, weekly, weeklyTrx, weeklyAcc, weeklyAccTrx = \
# self.get_daily_data(PaymentPBB, 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_targets(self, kode=None): def get_targets(self, kode=None):
targets = Targets.query_from([func.sum(Targets.t_anggaran).label("murni"), targets = Targets.query_from([
func.sum(Targets.t_perubahan).label("perubahan"),]).filter( func.sum(Targets.t_anggaran).label("murni"),
func.sum(Targets.t_perubahan).label("perubahan"),])\
.filter(
Targets.tahun == self.ses['tahun'], Targets.tahun == self.ses['tahun'],
) )
if kode: if kode:
if kode=="pajak": if kode == "pajak":
return 0 return 0
targets = targets.filter( targets = targets.filter(
Targets.kode.ilike(jenis_pajak[kode]["kode"]+'%')) Targets.kode.ilike(jenis_pajak[kode]["kode"]+'%'))
...@@ -260,27 +215,27 @@ class Views(BaseView): ...@@ -260,27 +215,27 @@ class Views(BaseView):
else: else:
today = datetime.now().date() today = datetime.now().date()
#Harian
field = func.to_char(PembayaranSppt.tgl_pembayaran_sppt, 'yyyy-mm-dd') field = func.to_char(PembayaranSppt.tgl_pembayaran_sppt, 'yyyy-mm-dd')
filter_exp = PembayaranSppt.tgl_pembayaran_sppt.between( filter_exp = PembayaranSppt.tgl_pembayaran_sppt.between(
today-timedelta(6), today) today-timedelta(days=6), today)
amt, trx, daily, dailyTrx, dailyAcc, dailyAccTrx = \ amt, trx, daily, dailyTrx, dailyAcc, dailyAccTrx = \
self.get_daily_data(PembayaranSppt, field, self.get_daily_data(PembayaranSppt, field,
today.strftime("%Y-%m-%d"), filter_exp) today.strftime("%Y-%m-%d"), filter_exp)
filter_exp = PembayaranSppt.tgl_pembayaran_sppt.between( #Total Setahun
today-timedelta(days=6), today)
field = func.to_char(PembayaranSppt.tgl_pembayaran_sppt, 'IYYY') field = func.to_char(PembayaranSppt.tgl_pembayaran_sppt, 'IYYY')
filter_exp = PembayaranSppt.tgl_pembayaran_sppt.between( filter_exp = PembayaranSppt.tgl_pembayaran_sppt.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(PembayaranSppt, field, self.get_daily_data(PembayaranSppt, field,
str(today.year), filter_exp) str(today.year), filter_exp)
#Bulanan
field = func.to_char(PembayaranSppt.tgl_pembayaran_sppt, 'MM') field = func.to_char(PembayaranSppt.tgl_pembayaran_sppt, 'MM')
month, monthTrx, monthly, monthlyTrx, monthlyAcc, monthlyAccTrx = \ month, monthTrx, monthly, monthlyTrx, monthlyAcc, monthlyAccTrx = \
self.get_daily_data(PembayaranSppt, field, None, filter_exp) self.get_daily_data(PembayaranSppt, field, None, filter_exp)
#Mingguan
field = func.to_char(PembayaranSppt.tgl_pembayaran_sppt, 'WW') field = func.to_char(PembayaranSppt.tgl_pembayaran_sppt, 'WW')
filter_exp = PembayaranSppt.tgl_pembayaran_sppt.between( filter_exp = PembayaranSppt.tgl_pembayaran_sppt.between(
today-timedelta(weeks=6), today) today-timedelta(weeks=6), today)
...@@ -322,15 +277,16 @@ class Views(BaseView): ...@@ -322,15 +277,16 @@ class Views(BaseView):
today = datetime.strptime('2025-06-05', "%Y-%m-%d") today = datetime.strptime('2025-06-05', "%Y-%m-%d")
else: else:
today = datetime.now().date() today = datetime.now().date()
#Harian
field = func.to_char(PaymentBPHTB.tgl, 'yyyy-mm-dd') field = func.to_char(PaymentBPHTB.tgl, 'yyyy-mm-dd')
filter_exp = PaymentBPHTB.tgl.between( filter_exp = PaymentBPHTB.tgl.between(
today-timedelta(6), today) today-timedelta(days=6), today)
amt, trx, daily, dailyTrx, dailyAcc, dailyAccTrx = \ amt, trx, daily, dailyTrx, dailyAcc, dailyAccTrx = \
self.get_daily_data(PaymentBPHTB, field, self.get_daily_data(PaymentBPHTB, field,
today.strftime("%Y-%m-%d"), filter_exp) today.strftime("%Y-%m-%d"), filter_exp)
filter_exp = PaymentBPHTB.tgl.between(
today-timedelta(days=6), today) #Total Tahunan
field = func.to_char(PaymentBPHTB.tgl, 'IYYY') field = func.to_char(PaymentBPHTB.tgl, 'IYYY')
filter_exp = PaymentBPHTB.tgl.between( filter_exp = PaymentBPHTB.tgl.between(
datetime.strptime(f"{today.year}-01-01", "%Y-%m-%d"), today) datetime.strptime(f"{today.year}-01-01", "%Y-%m-%d"), today)
...@@ -338,15 +294,18 @@ class Views(BaseView): ...@@ -338,15 +294,18 @@ class Views(BaseView):
self.get_daily_data(PaymentBPHTB, field, self.get_daily_data(PaymentBPHTB, field,
str(today.year), filter_exp) str(today.year), filter_exp)
#Bulanan
field = func.to_char(PaymentBPHTB.tgl, 'MM') field = func.to_char(PaymentBPHTB.tgl, 'MM')
month, monthTrx, monthly, monthlyTrx, monthlyAcc, monthlyAccTrx = \ month, monthTrx, monthly, monthlyTrx, monthlyAcc, monthlyAccTrx = \
self.get_daily_data(PaymentBPHTB, field, None, filter_exp) self.get_daily_data(PaymentBPHTB, field, None, filter_exp)
#Mingguan
field = func.to_char(PaymentBPHTB.tgl, 'WW') field = func.to_char(PaymentBPHTB.tgl, 'WW')
filter_exp = PaymentBPHTB.tgl.between( filter_exp = PaymentBPHTB.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(PaymentBPHTB, field, None, filter_exp) self.get_daily_data(PaymentBPHTB, field, None, filter_exp)
ytd_target = float(self.get_targets("bphtb")) ytd_target = float(self.get_targets("bphtb"))
ytd_persen = round(ytd/ytd_target * 100, 2) if ytd_target > 0 else 0 ytd_persen = round(ytd/ytd_target * 100, 2) if ytd_target > 0 else 0
return {"today": amt, return {"today": amt,
...@@ -379,15 +338,15 @@ class Views(BaseView): ...@@ -379,15 +338,15 @@ class Views(BaseView):
today = datetime.now().date() today = datetime.now().date()
filter_ex = [] filter_ex = []
#Harian
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(days=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, typ) today.strftime("%Y-%m-%d"), filter_exp, typ)
filter_exp = PaymentPAD.tgl.between(
today-timedelta(days=6), today)
#Total Tahun Berjalan
field = func.to_char(PaymentPAD.tgl, 'IYYY') field = func.to_char(PaymentPAD.tgl, 'IYYY')
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)
...@@ -395,15 +354,19 @@ class Views(BaseView): ...@@ -395,15 +354,19 @@ class Views(BaseView):
self.get_daily_data(PaymentPAD, field, str( self.get_daily_data(PaymentPAD, field, str(
today.year), filter_exp, typ) today.year), filter_exp, typ)
#Bulanan
field = func.to_char(PaymentPAD.tgl, '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, typ) self.get_daily_data(PaymentPAD, field, None, filter_exp, typ)
#Mingguan
field = func.to_char(PaymentPAD.tgl, '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, typ) self.get_daily_data(PaymentPAD, field, None, filter_exp, typ)
#Target
ytd_target = float(self.get_targets(typ)) ytd_target = float(self.get_targets(typ))
ytd_persen = round(ytd/ytd_target * 100, 2) if ytd_target > 0 else 0 ytd_persen = round(ytd/ytd_target * 100, 2) if ytd_target > 0 else 0
return {"today": amt, return {"today": amt,
...@@ -434,19 +397,16 @@ class Views(BaseView): ...@@ -434,19 +397,16 @@ class Views(BaseView):
today = datetime.strptime('2025-06-05', "%Y-%m-%d") today = datetime.strptime('2025-06-05', "%Y-%m-%d")
else: else:
today = datetime.now().date() today = datetime.now().date()
filter_ex = []
# if typ == 'hotel':
# filter_ex = [PaymentPAD.jenis_pajak == "PBJT - JASA PERHOTELAN",]
# Harian
field = func.to_char(PaymentWEBR.tgl, 'yyyy-mm-dd') field = func.to_char(PaymentWEBR.tgl, 'yyyy-mm-dd')
filter_exp = PaymentWEBR.tgl.between( filter_exp = PaymentWEBR.tgl.between(
today-timedelta(6), today) today-timedelta(days=6), today)
amt, trx, daily, dailyTrx, dailyAcc, dailyAccTrx = \ amt, trx, daily, dailyTrx, dailyAcc, dailyAccTrx = \
self.get_daily_data(PaymentWEBR, field, self.get_daily_data(PaymentWEBR, field,
today.strftime("%Y-%m-%d"), filter_exp) today.strftime("%Y-%m-%d"), filter_exp)
filter_exp = PaymentWEBR.tgl.between(
today-timedelta(days=6), today)
#Tahunan
field = func.to_char(PaymentWEBR.tgl, 'IYYY') field = func.to_char(PaymentWEBR.tgl, 'IYYY')
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)
...@@ -454,10 +414,12 @@ class Views(BaseView): ...@@ -454,10 +414,12 @@ class Views(BaseView):
self.get_daily_data(PaymentWEBR, field, self.get_daily_data(PaymentWEBR, field,
str(today.year), filter_exp) str(today.year), filter_exp)
#Bulanan
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 = \
self.get_daily_data(PaymentWEBR, field, None, filter_exp) self.get_daily_data(PaymentWEBR, field, None, filter_exp)
#Mingguan
field = func.to_char(PaymentWEBR.tgl, 'YYYY-WW') field = func.to_char(PaymentWEBR.tgl, 'YYYY-WW')
filter_exp = PaymentWEBR.tgl.between( filter_exp = PaymentWEBR.tgl.between(
today-timedelta(weeks=6), today) today-timedelta(weeks=6), today)
...@@ -630,20 +592,19 @@ class Views(BaseView): ...@@ -630,20 +592,19 @@ class Views(BaseView):
if jenis == "pbb": if jenis == "pbb":
realisasi = self.get_pbb_data()["ytd"] realisasi = self.get_pbb_data()["ytd"]
elif jenis=="bphtb": elif jenis == "bphtb":
realisasi = self.get_bphtb_data()["ytd"] realisasi = self.get_bphtb_data()["ytd"]
else: else:
realisasi = self.get_pad_data(jenis)["ytd"] realisasi = self.get_pad_data(jenis)["ytd"]
return {jenis: {"kode": jenis_pajak[jenis]["kode"].ljust(8, '0'), return {jenis: {"kode": jenis_pajak[jenis]["kode"].ljust(8, '0'),
"nama": jenis_pajak[jenis]["nama"], "nama": jenis_pajak[jenis]["nama"],
"target": target, "target": target,
"realisasi": realisasi, "realisasi": realisasi,
"sisa": target - realisasi, "sisa": target - realisasi,
"persen": round(realisasi/target * 100,2) if target > 0 else 0} "persen": round(realisasi/target * 100, 2) if target > 0 else 0}
} }
@view_config(route_name='eis-pcpd-act', renderer='json') @view_config(route_name='eis-pcpd-act', renderer='json')
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!