only_h2h.py
3.63 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
from opensipkd.waktu import dmyhms
from opensipkd.string import FixLength
from sismiop.services.base import INVOICE_ID
from opensipkd.iso8583.bjb.pbb.structure import (
PAYMENT_CODE,
INVOICE_PROFILE,
)
from opensipkd.iso8583.bjb.pbb.models import Log
from ..common import (
BaseApp,
one_day,
get_channel_name,
InvalidSource,
)
from ..models import Pbb
class App(BaseApp):
conf_name = 'pbb payment last date'
report_orm = Pbb
va_product_code = '02'
def get_before(self, r):
q = self.rpt_session.query(Pbb).filter_by(
kd_propinsi=r['kd_propinsi'], kd_dati2=r['kd_dati2'],
kd_kecamatan=r['kd_kecamatan'], kd_kelurahan=r['kd_kelurahan'],
kd_blok=r['kd_blok'], no_urut=r['no_urut'],
kd_jns_op=r['kd_jns_op'], thn_pajak_sppt=r['thn_pajak_sppt'])
q = q.filter(Pbb.id < r['id'])
q = q.order_by(Pbb.id.desc())
return q.first()
def create_data(self, log_iso): # Override
self.invoice_id = log_iso.bit_061
if log_iso.mti == '0210' and log_iso.bit_039 != '00':
raise InvalidSource('payment gagal')
inv_id = FixLength(INVOICE_ID)
inv_id.set_raw(self.invoice_id)
channel_nama = get_channel_name(
log_iso.bit_018, log_iso.bit_032, log_iso.bit_041, log_iso.bit_042,
log_iso.bit_043)
channel_kode = log_iso.bit_018 or '0000'
print(log_iso.id)
r = dict(
id=log_iso.id, kd_propinsi=inv_id['Propinsi'],
kd_dati2=inv_id['Kabupaten'], kd_kecamatan=inv_id['Kecamatan'],
kd_kelurahan=inv_id['Kelurahan'], kd_blok=inv_id['Blok'],
no_urut=inv_id['Urut'], kd_jns_op=inv_id['Jenis'],
thn_pajak_sppt=inv_id['Tahun'], pembayaran_sppt_ke=1,
stan=log_iso.bit_011, ntb=log_iso.bit_048,
jml_sppt_yg_dibayar=float(log_iso.bit_004),
channel_kode=channel_kode, channel_nama=channel_nama,
bank_id=log_iso.bit_032, user_id=log_iso.bit_107)
if log_iso.mti == '0210':
profile = log_iso.bit_062_data
r.update(dict(
tgl_pembayaran_sppt=log_iso.created.date(),
tgl_rekam_byr_sppt=log_iso.created,
denda_sppt=float(profile['Denda']),
discount=float(profile['Discount']),
nm_wp_sppt=profile['Nama'],
pbb_yg_harus_dibayar_sppt=float(profile['Tagihan'])))
before = self.get_before(r)
if before:
if log_iso.mti == '0210':
r['pembayaran_sppt_ke'] = before.pembayaran_sppt_ke + 1
else: # mti = 0400 = reversal
r['id'] = before.id
r['tgl_batal'] = log_iso.created
r['jml_sppt_yg_dibayar'] = 0
r['denda_sppt'] = r['discount'] = 0
r['pbb_yg_harus_dibayar_sppt'] = 0
elif log_iso.mti == '0400':
raise InvalidSource(
f'ID {log_iso.id} tidak ada yang perlu dibatalkan')
return r
def get_report(self, log_iso): # Override
q = self.rpt_session.query(Pbb).filter_by(id=log_iso.id)
return q.first()
def get_last_time(self): # Override
return dmyhms(self.last_pay.created)
def get_filter_query(self, q): # Override
return q.filter(
Log.created >= self.tgl_awal,
Log.created < self.tgl_akhir + one_day,
Log.bit_003 == PAYMENT_CODE,
Log.mti.in_(['0210', '0400']))
def get_payment_query(self): # Override
q = self.prod_session.query(Log)
q = self.get_filter_query(q)
return q.order_by(Log.created)