__init__.py 8.54 KB
# 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)