__init__.py
8.54 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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
# import sys
# # from tangsel.pbb.models import PadTp
# # from tangsel.pbb.models.payment import PadReversal
# import logging
# from datetime import datetime
# from tangsel.base import get_settings
# from tangsel.base.tools.api import (get_mandatory, auth_from_rpc,
# JsonRpcBillNotFoundError,
# JsonRpcPaymentNotFoundError,
# JsonRpcReversedError,
# JsonRpcBillAllreadyPaidError,
# JsonRpcBillDifferentError)
# from tangsel.pbb.models.payment import PbbReversal
# from pyramid_rpc.jsonrpc import jsonrpc_method, JsonRpcError
# from tangsel.pbb.models.h2h.payment import inquiry, payment, advice, reversal, get_tp
# if sys.version[0] != '3':
# raise Exception("Harus Python 3")
# """
# {
# bit_002 : N..19 Primary Account Number O E
# bit_003 : N 6 Processing Code* O E
# bit_004 : N 12 Amount Transaction M M
# bit_007 : N 10 Transmission Date/Time M M
# bit_011 : N 6 System Trace Audit Number O E
# bit_012 : N 6 Time local transaction M E
# bit_013 : N 4 Date local transaction M E
# bit_015 : N 4 Date, Settlement M E
# bit_018 : N 4 Merchant Type* M E
# bit_022 : N 3 POS Entry Mode Code M E
# bit_032 : N..11 Acquiring Institution Code M E
# bit_033 : N..11 Forwarding Institution ID Code M E
# bit_037 : AN..12 Retrival Ref Number M E
# bit_039 : N..2 Response Code O M
# bit_041 : N..8 Terminal identification number M E
# bit_042 : N..15 Terminal name or user identification M E
# bit_043 : A..40 Card Acceptor Name/Location O E
# bit_049 : A or N 3 Currency Code, Transaction O E
# bit_060 : ANS.999 Additional Data/KD PEMDA O E
# bit_061 : ANS.999 Additional Data/NO BAYAR M E
# bit_062 : ANS.999 Additonal Data/Invoice Profile
# code : N..24 Kode/Nomor Bayar M
# name : AN..35 Nama Penyetor WP/OP/WR/OR M
# address : A..40 Alamat1 M
# address2 : A..40 Alamat2 M
# amount : N..12 Bill Amount M
# fine : N..12 Fine Amount M
# total : N..12 Total M
# account_no : AN..20 Kode Rekening M
# description : AN..40 Nama Rekening M
# unit_code : AN..20 Kode SKPD M
# unit_name : AN..40 Nama SKPD M
# additional : AN..40 Additional Data untuk pesan O
# additional2 : AN..40 Additional Data untuk pesan O
# }
# """
# log = logging.getLogger(__name__)
# # def check_tp(data):
# # return PadTp.query_id(data["bit_033"]).first()
# class H2h:
# def __init__(self, request):
# self.req = request
# self.settings = get_settings()
# self.data = None
# def set_response_ok(self, data):
# data["bit_039"] = "00"
# return data
# def set_response(self, data, result):
# return self.set_response_ok(data)
# def inv_id(self):
# return self.data["bit_061"].strip()
# 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")
# @jsonrpc_method(method='inquiry', endpoint='api-h2h-pemda-pbb')
# def inquiry(self, data):
# self.data = data
# request = self.req
# log.warning("INQ req CA: {}".format(self.data))
# get_mandatory(data, ["bit_061", "bit_018", "bit_033", ])
# tp = get_tp(data, self.settings)
# auth_from_rpc(request)
# result = inquiry(self.inv_id())
# if not result.calc.invoice:
# log.info("Invoice {} tidak ditemukan".format(result.invoice_id_raw))
# raise JsonRpcBillNotFoundError
# if result.calc.is_paid():
# raise JsonRpcBillAllreadyPaidError
# data = self.set_response_ok(data)
# result.set_invoice_profile()
# profile = result.invoice_profile
# profile["additional"] = self.settings["h2h_additional"]
# profile["additional2"] = self.settings["h2h_additional2"]
# profile["biller_nm"] = self.settings["company"]
# data["bit_062"] = profile
# data["bit_004"] = profile["total"]
# log.warning("INQ resp CA: {}".format(data))
# return dict(data=data)
# @jsonrpc_method(method='payment', endpoint='api-h2h-pemda-pbb')
# def payment(self, data):
# self.data = data
# request = self.req
# log.warning("PAY req CA {}".format(data))
# tp = get_tp(data, self.settings)
# get_mandatory(data, ["bit_004", "bit_007", "bit_011", "bit_012",
# "bit_013", "bit_015", "bit_018",
# "bit_032", "bit_033", "bit_037",
# "bit_061", "bit_062"])
# auth_from_rpc(request)
# result = payment(self.inv_id())
# if not result.calc.invoice:
# raise JsonRpcBillNotFoundError
# if result.calc.is_paid():
# raise JsonRpcBillAllreadyPaidError
# if result.cek_iso_payment(data):
# message = "Pernah Terjadi Payment dengan NTB sama"
# log.warning("PAY resp CA {}".format(message))
# raise JsonRpcError(message=message)
# amount = int(data["bit_004"])
# if amount != result.calc.total:
# raise JsonRpcBillDifferentError
# # result.set_invoice_profile()
# pay = result.create_payment(data)
# # data["bit_048"] = result.save_iso_payment(pay)
# ntp = result.save_iso_payment(pay)
# log.warning("NTP {}".format(ntp))
# data["bit_047"] = ntp
# # data["bit_062"] = result.invoice_profile
# log.warning("PAY resp CA {}".format(data))
# # H2hLog.save(data, get_tanggal(data))
# return dict(data=data)
# def check_payment(self, result):
# if not result.calc.invoice:
# raise JsonRpcBillNotFoundError
# pay = result.cek_iso_payment(self.data)
# if not pay:
# raise JsonRpcPaymentNotFoundError
# rev = PbbReversal.query_id(pay.id).first()
# if rev:
# raise JsonRpcReversedError
# return pay
# @jsonrpc_method(method='advice', endpoint='api-h2h-pemda-pbb')
# def advice(self, data):
# self.data = data
# log.warning("ADV req CA {}".format(data))
# auth_from_rpc(self.req)
# tp = get_tp(data, self.settings)
# get_mandatory(data, ["bit_004", "bit_007", "bit_012",
# "bit_013", "bit_015", "bit_018",
# "bit_032", "bit_033", "bit_037",
# "bit_061", "bit_062"])
# result = advice(self.inv_id())
# # if not result.calc.invoice:
# # raise JsonRpcBillNotFoundError
# #
# pay = self.check_payment(result)
# data = self.set_response(data, result)
# # result.set_invoice_profile()
# # data["bit_062"]=result.invoice_profile
# # data["bit_048"] = pay.ntp
# # profile = data["bit_062"]
# # data["bit_004"] = profile["amount"] + profile["fine"] - profile["discount"]
# # data["bit_062"]["total"] = data["bit_004"]
# log.warning("ADV resp CA {}".format(data))
# return dict(code=0, message="Sukses Advice", data=data)
# @jsonrpc_method(method='reversal', endpoint='api-h2h-pemda-pbb')
# def reversal(self, data):
# self.data = data
# log.warning("REV req CA {}".format(data))
# auth_from_rpc(self.req)
# get_mandatory(data, ["bit_004", "bit_007", "bit_012",
# "bit_013", "bit_015", "bit_018",
# "bit_032", "bit_033", "bit_037",
# "bit_061", "bit_062"])
# result = reversal(self.inv_id())
# if not result.calc.invoice:
# raise JsonRpcBillNotFoundError
# pay = self.check_payment(result)
# result.reversal(pay)
# # data["bit_048"] = pay.ntp
# data["bit_047"] = pay.ntp
# data = self.set_response(data, result)
# # data = self.set_response_ok(data)
# return dict(data=data)