pbb.py
4.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
import sys
import transaction
from opensipkd.string import (
FixLength,
DateTimeVar,
)
from opensipkd.waktu import (
dmyhms,
create_datetime,
)
from sismiop.models.default import PembayaranSppt
from sismiop.services.base import get_db_session
from opensipkd.iso8583.bjb.pbb import Doc
from opensipkd.iso8583.bjb.pbb.structure import (
INVOICE_ID,
INVOICE_PROFILE,
)
from ..models import Pbb
from .common import (
get_iso,
get_keys,
App as BaseApp,
)
def get_inv_id(iso):
inv_id = FixLength(INVOICE_ID)
inv_id.set_raw(iso.get_invoice_id())
return inv_id
def get_profile(iso):
p = FixLength(INVOICE_PROFILE)
p.set_raw(iso.get_invoice_profile())
return p
def get_tgl_bayar(iso, year):
raw = iso.get_value(7)
t = DateTimeVar()
t.set_raw(raw)
return create_datetime(
year, int(t['month']), int(t['day']), int(t['hour']),
int(t['minute']), int(t['second']))
class App(BaseApp):
iso_class = Doc
report_orm = Pbb
def __init__(self, argv):
super().__init__(argv)
if not self.pid:
return
d = self.module.Doc()
self.iso_inquiry_orm = d.iso_inquiry_model
self.iso_payment_orm = d.iso_payment_model
self.iso_reversal_orm = d.iso_reversal_model
self.base_q_iso = self.prod_session.query(
self.iso_payment_orm, self.iso_inquiry_orm).filter(
self.iso_payment_orm.inquiry_id == self.iso_inquiry_orm.id)
self.base_q_psppt = self.prod_session.query(PembayaranSppt)
def get_db_session(self): # Override
return get_db_session()
def get_psppt(self, p):
q = self.base_q_psppt.filter_by(
kd_propinsi=p['Propinsi'],
kd_dati2=p['Kabupaten'],
kd_kecamatan=p['Kecamatan'],
kd_kelurahan=p['Kelurahan'],
kd_blok=p['Blok'],
no_urut=p['Urut'],
kd_jns_op=p['Jenis'],
thn_pajak_sppt=p['Tahun']).order_by(
PembayaranSppt.pembayaran_sppt_ke.desc())
return q.first()
def __run_payment(self):
last = self.get_last_id('pbb payment last id')
q_iso = self.base_q_iso.filter(self.iso_inquiry_orm.id > last.as_int())
q_iso = q_iso.order_by(self.iso_inquiry_orm.id)
found = False
for row_pay, row_inq in q_iso.limit(1000):
iso = get_iso(row_pay.iso_request, Doc, self.option.debug)
if self.get_report(iso):
continue
d = get_keys(iso)
tgl_bayar = get_tgl_bayar(iso, row_inq.tgl.year)
s_tgl = dmyhms(tgl_bayar)
self.log.info(
f'Tgl bayar {s_tgl}, Nomor bayar {d["nomor_bayar"]}, '
f'STAN {d["stan"]}, NTB {d["ntb"]}, Channel {d["channel"]}')
inv_id = get_inv_id(iso)
p = get_profile(iso)
psppt = self.get_psppt(p)
rpt = Pbb(
stan=d['stan'], ntb=d['ntb'], kd_propinsi=p['Propinsi'],
kd_dati2=p['Kabupaten'], kd_kecamatan=p['Kecamatan'],
kd_kelurahan=p['Kelurahan'], kd_blok=p['Blok'],
no_urut=p['Urut'], kd_jns_op=p['Jenis'],
thn_pajak_sppt=p['Tahun'],
pembayaran_sppt_ke=psppt.pembayaran_sppt_ke,
jml_sppt_yg_dibayar=iso.get_amount(),
tgl_pembayaran_sppt=tgl_bayar.date(),
tgl_rekam_byr_sppt=tgl_bayar,
nm_wp_sppt=p['Nama'],
channel_kode=iso.get_channel().strip(),
channel_nama=d['channel'],
user_id=iso.getBit(107))
last.nilai = str(row_inq.id)
print(f'last.nilai {last.nilai}')
with transaction.manager:
self.rpt_session.add(rpt)
self.rpt_session.add(last)
found = True
return found
def run_payment(self): # Override
while True:
found = self.__run_payment()
if not found:
break
def run_reversal(self): # Override
super().run_reversal('pbb reversal last date')
def main(argv=sys.argv[1:]):
app = App(argv)
app.run()