h2h.py
3.6 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
from opensipkd.base import get_settings
from opensipkd.base.tools.api import (JsonRpcBillerNotFoundError,
JsonRpcCaNotRegisteredError, get_mandatory)
from datetime import datetime
import logging
log = logging.getLogger(__name__)
ERR_MAX_LOOP = '*** Max loop for create payment ID. ' \
'Call your programmer please.'
class H2hIso8583(object):
def __init__(self, data):
self.data = data
log.info("Request: {}".format(self.data))
ca = self.ca_allowed()
if not ca:
raise JsonRpcCaNotRegisteredError
self.bank_id = ca.id
self.inv_no = self.data["bit_061"].strip()
self.inv_id = None
self.tgl = self.get_tanggal()
self.settings = get_settings()
self.calc = None
self.invoice_profile = {}
self.cur_tahun = datetime.now().date().year
def ca_allowed(self):
return
def hitung_denda(self, pokok, expire, now=datetime.now().date()):
jatuh_tempo = expire
kini = now
x = (kini.year - jatuh_tempo.year) * 12
y = kini.month - jatuh_tempo.month
bln_tunggakan = x + y + 1
if kini.day <= jatuh_tempo.day:
bln_tunggakan -= 1
if bln_tunggakan < 1:
bln_tunggakan = 0
if bln_tunggakan > 24:
bln_tunggakan = 24
return bln_tunggakan * self.persen_denda / 100.0 * self.tagihan
def get_tanggal(self):
dt = "{}{}{}".format(datetime.now().strftime("%Y"),
self.data["bit_013"], self.data["bit_012"])
return datetime.strptime(dt, "%Y%m%d%H%M%S")
def get_amt(self):
return self.data["bit_004"]
def get_acquirer(self):
return self.data["bit_032"]
def get_ntb(self):
return self.data["bit_037"]
def get_stan(self):
return self.data["bit_011"]
def get_bank(self):
return self.data["bit_033"]
def get_channel(self):
return self.data["bit_018"]
def set_amt(self, amt):
self.data["bit_004"] = amt
def set_response_ok(self):
self.data["bit_039"] = "00"
def set_profile(self):
self.data["bit_062"] = self.invoice_profile
def set_ntp(self, ntp):
self.data["bit_048"] = ntp
def write_resp(self, prefix):
log.warning("{} CA {}".format(prefix, self.data))
def inquiry(self):
self.write_resp("INQ req")
get_mandatory(self.data, ["bit_061", "bit_012",
"bit_013", "bit_018", "bit_033", ])
def get_ntp(self):
pass
def payment(self):
self.write_resp("PAY req")
get_mandatory(self.data, ["bit_004", "bit_007", "bit_012",
"bit_013", "bit_015", "bit_018",
"bit_032", "bit_033", "bit_037",
"bit_061", "bit_062"])
def reversal(self):
self.write_resp("REV req")
get_mandatory(self.data, ["bit_004", "bit_007", "bit_012",
"bit_013", "bit_015", "bit_018",
"bit_032", "bit_033", "bit_037",
"bit_061", "bit_062"])
def advice(self):
self.write_resp("ADV req")
get_mandatory(self.data, ["bit_004", "bit_007", "bit_012",
"bit_013", "bit_015", "bit_018",
"bit_032", "bit_033", "bit_037",
"bit_061", "bit_062"])