doc.py
5.06 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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
from opensipkd.string import FixLength
from opensipkd.iso8583.network.doc import Doc as NetworkDoc
from opensipkd.iso8583.bjb.pbb.majalengka import Doc as BaseDoc
from opensipkd.iso8583.bjb.structure import (
ERR_NOT_AVAILABLE,
ERR_ALREADY_PAID,
ERR_INSUFFICIENT_FUND,
ERR_PAYMENT_NOT_FOUND,
ERR_INVOICE_OPEN,
)
from sismiop.services.base import get_nop
from .structure import (
TRANSACTION_BITS,
INQUIRY_CODE,
PAYMENT_CODE,
INVOICE_PROFILE,
RC_ALREADY_PAID,
RC_NOT_AVAILABLE,
RC_PAYMENT_NOT_FOUND,
RC_ALREADY_CANCELLED,
RC_OTHER,
)
from .models import Log
class Doc(BaseDoc):
def get_bit_definition(self): # Override
return TRANSACTION_BITS
def get_inquiry_code(self): # Override
return INQUIRY_CODE
def get_payment_code(self): # Override
return PAYMENT_CODE
def get_log_model(self): # Overrride
return Log
def get_inquiry_bits(self): # Override
return [4, 48]
def get_payment_bits(self): # Override
return [3, 4, 11, 37, 48]
def set_invoice_id(self, value):
self.setBit(48, value)
def get_invoice_id(self):
return self.getBit(48).strip().lstrip('0')
def get_transaction_time(self):
raw = self.getBit(7)
self.transaction_time.set_raw(raw)
return self.transaction_time.get_value()
def getBit(self, bit): # Override
if bit in (18, 41, 42, 43):
return
return super().getBit(bit)
def set_invoice_profile(self, raw):
self.setBit(48, raw)
def set_ntb(self, v): # Override
self.setBit(37, v)
def get_ntb(self): # Override
return self.get_value(37)
def set_ntp(self, v): # Override
self.invoice_profile['NTP'] = v
def get_ntp(self): # Override
return self.invoice_profile['NTP']
def copy_inquiry_bits(self):
self.copy([3, 7, 11, 32, 37, 48])
def set_all_invoice_profile(self, inq): # Override
p = FixLength(INVOICE_PROFILE)
p.from_dict({
'Invoice ID': self.get_invoice_id(),
'Nama': inq.get_nama_wp(),
'Nama Kecamatan': inq.get_kecamatan_op(),
'Nama Kelurahan': inq.get_kelurahan_op(),
'Tagihan': inq.tagihan,
'Denda': inq.denda,
'Total Bayar': inq.tagihan + inq.denda})
self.invoice_profile = p
self.set_invoice_profile_bit()
DBSession = self.get_db_session()
inv = inq.invoice
nop = get_nop(inv)
t_inq_id = self.inquiry_sequence.execute(DBSession.bind)
t_inq = self.iso_inquiry_model(
id=t_inq_id, nop=nop, propinsi=inv.kd_propinsi,
kabupaten=inv.kd_dati2, kecamatan=inv.kd_kecamatan,
kelurahan=inv.kd_kelurahan, blok=inv.kd_blok,
urut=inv.no_urut, jenis=inv.kd_jns_op,
tahun=inv.thn_pajak_sppt, tgl=inq.tgl_bayar,
tagihan=inq.tagihan, denda=inq.denda,
persen_denda=inq.persen_denda,
jatuh_tempo=inq.get_jatuh_tempo(),
bulan_tunggakan=inq.bln_tunggakan,
pengirim=self.get_bank_id())
DBSession.add(t_inq)
def set_invoice_profile_bit(self):
self.setBit(48, self.invoice_profile.get_raw())
self.long_bits[48] = self.invoice_profile.to_dict()
def do_payment(self, inq): # Override
pay = super().do_payment(inq)
self.set_invoice_profile_bit()
return pay
def set_inquiry_request(self, tgl_bayar=None): # Override
NetworkDoc.set_inquiry_request(self)
self.set_bank_id('009')
def set_payment_request(self, tgl_bayar=None): # Override
NetworkDoc.set_payment_request(self)
self.set_bank_id('009')
if not tgl_bayar:
tgl_bayar = datetime.now()
inq = self.get_inquiry_response()
if inq:
self.set_bits_from_inquiry(inq)
def ack_not_found(self): # Override
msg = ERR_NOT_FOUND.format(invoice_id=self.get_invoice_id())
self.ack(RC_NOT_AVAILABLE, msg)
def ack_not_available(self): # Override
msg = ERR_NOT_AVAILABLE.format(invoice_id=self.get_invoice_id())
self.ack(RC_NOT_AVAILABLE, msg)
def ack_already_paid(self): # Override
msg = ERR_ALREADY_PAID.format(invoice_id=self.get_invoice_id())
self.ack(RC_ALREADY_PAID, msg)
def ack_insufficient_fund(self, total): # Override
msg = ERR_INSUFFICIENT_FUND.format(
invoice_id=self.get_invoice_id(),
bayar=self.from_iso.get_amount(),
tagihan=total)
self.ack(RC_INSUFFICIENT_FUND, msg)
def ack_payment_not_found(self): # Override
msg = ERR_PAYMENT_NOT_FOUND.format(invoice_id=self.get_invoice_id())
self.ack(RC_PAYMENT_NOT_FOUND, msg)
def ack_invoice_open(self): # Override
msg = ERR_INVOICE_OPEN.format(invoice_id=self.get_invoice_id())
self.ack(RC_ALREADY_CANCELLED, msg)
def ack_other(self, msg): # Override
self.ack(RC_OTHER, msg)