class BaseResponse(object): def __init__(self, parent): self.parent = parent self.invoice_id = FixLength(INVOICE_ID) self.invoice_id_raw = parent.from_iso.get_invoice_id() self.invoice_id.set_raw(self.invoice_id_raw) def is_allowed(self): bank_name = self.parent.conf['name'] tp_conf = host[bank_name] if 'kd_tp' not in tp_conf: bank_id = self.parent.from_iso.get_bank_id() if bank_id not in tp_conf: return self.parent.ack_not_allowed() tp_conf = tp_conf[bank_id] self.parent.conf.update(tp_conf) return True def is_transaction_owner(self, pay): conf = self.parent.conf return pay.kd_kanwil_bank == conf['kd_kanwil_bank'] and \ pay.kd_kppbb_bank == conf['kd_kppbb_bank'] and \ pay.kd_bank_tunggal == conf['kd_bank_tunggal'] and \ pay.kd_bank_persepsi == conf['kd_bank_persepsi'] and \ pay.kd_tp == conf['kd_tp'] def commit(self): DBSession.commit() self.parent.ack()
class ReversalByQuery(Reversal): def __init__(self, invoice_id_raw): self.invoice_id = FixLength(INVOICE_ID) self.invoice_id.set_raw(invoice_id_raw) Reversal.__init__(self, models, DBSession, self.invoice_id['Propinsi'], self.invoice_id['Kabupaten'], self.invoice_id['Kecamatan'], self.invoice_id['Kelurahan'], self.invoice_id['Blok'], self.invoice_id['Urut'], self.invoice_id['Jenis'], self.invoice_id['Tahun Pajak']) def set_unpaid(self): pay = Reversal.set_unpaid(self) if not pay: q = DBSession.query(self.models.Payment).filter_by( propinsi=self.invoice.kd_propinsi, kabupaten=self.invoice.kd_dati2, kecamatan=self.invoice.kd_kecamatan, kelurahan=self.invoice.kd_kelurahan, blok=self.invoice.kd_blok, urut=self.invoice.no_urut, jenis=self.invoice.kd_jns_op, tahun=self.invoice.thn_pajak_sppt) q.delete() DBSession.commit()
class ReversalByQuery(Reversal): def __init__(self, invoice_id_raw): self.invoice_id = FixLength(INVOICE_ID) self.invoice_id.set_raw(invoice_id_raw) Reversal.__init__( self, models, DBSession, self.invoice_id['Propinsi'], self.invoice_id['Kabupaten'], self.invoice_id['Kecamatan'], self.invoice_id['Kelurahan'], self.invoice_id['Blok'], self.invoice_id['Urut'], self.invoice_id['Jenis'], self.invoice_id['Tahun Pajak']) def set_unpaid(self): pay = Reversal.set_unpaid(self) if not pay: q = DBSession.query(self.models.Payment).filter_by( propinsi=self.invoice.kd_propinsi, kabupaten=self.invoice.kd_dati2, kecamatan=self.invoice.kd_kecamatan, kelurahan=self.invoice.kd_kelurahan, blok=self.invoice.kd_blok, urut=self.invoice.no_urut, jenis=self.invoice.kd_jns_op, tahun=self.invoice.thn_pajak_sppt) q.delete() DBSession.commit()
class InquiryByQuery(Query): def __init__(self, invoice_id_raw): Query.__init__(self, models, DBSession) self.invoice_id = FixLength(INVOICE_ID) self.invoice_id.set_raw(invoice_id_raw) q = self.query_invoice(self.invoice_id['Propinsi'], self.invoice_id['Kabupaten'], self.invoice_id['Kecamatan'], self.invoice_id['Kelurahan'], self.invoice_id['Blok'], self.invoice_id['Urut'], self.invoice_id['Jenis'], self.invoice_id['Tahun Pajak']) self.invoice = q.first() self.ket = None if not self.invoice: return self.nama_wp = self.invoice.nm_wp_sppt self.payment = self.invoice2payment(self.invoice) if self.payment: self.total = self.payment.jml_sppt_yg_dibayar self.tgl_bayar = self.payment.tgl_rekam_byr_sppt self.ket = 'pembayaran ke {n}'.format(n=self.payment.pembayaran_sppt_ke) q = DBSession.query(models.TempatPembayaran).filter_by( kd_kanwil=self.payment.kd_kanwil_bank, kd_kppbb=self.payment.kd_kppbb_bank, kd_bank_tunggal=self.payment.kd_bank_tunggal, kd_bank_persepsi=self.payment.kd_bank_persepsi, kd_tp=self.payment.kd_tp) tp = q.first() self.tempat_pembayaran = dict() if tp: self.tempat_pembayaran['nama'] = tp.nm_tp alamat = tp.alamat_tp and tp.alamat_tp.strip() if alamat: self.tempat_pembayaran['alamat'] = alamat self.h2h = self.invoice2iso_pay() def invoice2iso_pay(self): q = DBSession.query(models.Payment).filter_by( propinsi=self.invoice.kd_propinsi, kabupaten=self.invoice.kd_dati2, kecamatan=self.invoice.kd_kecamatan, kelurahan=self.invoice.kd_kelurahan, blok=self.invoice.kd_blok, urut=self.invoice.no_urut, jenis=self.invoice.kd_jns_op, tahun=self.invoice.thn_pajak_sppt).order_by( models.Payment.ke) r = [] for iso_pay in q: q_inq = DBSession.query(models.Inquiry).filter_by( id=iso_pay.inquiry_id) iso_inq = q_inq.first() total = iso_inq.tagihan + iso_inq.denda ket = 'Pembayaran ke {k}'.format(k=iso_pay.ke) d = dict(ket=ket, tgl=iso_inq.tgl, total=total) r.append(d) return r
class Transaction(BaseTransaction): def __init__(self, *args, **kwargs): self.invoice_id = FixLength(INVOICE_ID) self.invoice_profile = FixLength(INVOICE_PROFILE) BaseTransaction.__init__(self, *args, **kwargs) self.invoice_id_raw = None # Override def get_bit_definition(self): return TRANSACTION_BITS # Override def get_inquiry_code(self): return INQUIRY_CODE # Override def get_payment_code(self): return PAYMENT_CODE # Override def set_transaction_response(self): self.setMTI('0210') self.copy([2, 3, 7, 11, 12, 13, 15, 18, 32, 37, 41, 48, 90]) # Override def get_invoice_id(self): if self.invoice_id_raw is not None: return self.invoice_id_raw raw = self.get_value(48) self.invoice_profile.set_raw(raw) self.invoice_id_raw = self.invoice_profile['ID Billing'].strip() self.invoice_id.set_raw(self.invoice_id_raw) return self.invoice_id_raw def set_invoice_id(self, raw): self.invoice_profile['ID Billing'] = raw self.set_invoice_profile() # Override def set_invoice_profile(self): self.setBit(48, self.invoice_profile.get_raw()) # Override def set_ntp(self, ntp): self.invoice_profile['NTPD'] = ntp # Override def get_ntb(self): return self.get_value(90) def set_ntb(self, raw): self.setBit(90, raw) # Override def payment_response(self): self.copy([4])
class InquiryByQuery(Query): def __init__(self, invoice_id_raw): Query.__init__(self, models, DBSession) self.invoice_id = FixLength(INVOICE_ID) self.invoice_id.set_raw(invoice_id_raw) q = self.query_invoice( self.invoice_id['Propinsi'], self.invoice_id['Kabupaten'], self.invoice_id['Kecamatan'], self.invoice_id['Kelurahan'], self.invoice_id['Blok'], self.invoice_id['Urut'], self.invoice_id['Jenis'], self.invoice_id['Tahun Pajak']) self.invoice = q.first() self.ket = None if not self.invoice: return self.nama_wp = self.invoice.nm_wp_sppt self.payment = self.invoice2payment(self.invoice) if self.payment: self.total = self.payment.jml_sppt_yg_dibayar self.tgl_bayar = self.payment.tgl_rekam_byr_sppt self.ket = 'pembayaran ke {n}'.format( n=self.payment.pembayaran_sppt_ke) q = DBSession.query(models.TempatPembayaran).filter_by( kd_kanwil=self.payment.kd_kanwil_bank, kd_kppbb=self.payment.kd_kppbb_bank, kd_bank_tunggal=self.payment.kd_bank_tunggal, kd_bank_persepsi=self.payment.kd_bank_persepsi, kd_tp=self.payment.kd_tp) tp = q.first() self.tempat_pembayaran = dict() if tp: self.tempat_pembayaran['nama'] = tp.nm_tp alamat = tp.alamat_tp and tp.alamat_tp.strip() if alamat: self.tempat_pembayaran['alamat'] = alamat self.h2h = self.invoice2iso_pay() def invoice2iso_pay(self): q = DBSession.query(models.Payment).filter_by( propinsi=self.invoice.kd_propinsi, kabupaten=self.invoice.kd_dati2, kecamatan=self.invoice.kd_kecamatan, kelurahan=self.invoice.kd_kelurahan, blok=self.invoice.kd_blok, urut=self.invoice.no_urut, jenis=self.invoice.kd_jns_op, tahun=self.invoice.thn_pajak_sppt).order_by(models.Payment.ke) r = [] for iso_pay in q: q_inq = DBSession.query( models.Inquiry).filter_by(id=iso_pay.inquiry_id) iso_inq = q_inq.first() total = iso_inq.tagihan + iso_inq.denda ket = 'Pembayaran ke {k}'.format(k=iso_pay.ke) d = dict(ket=ket, tgl=iso_inq.tgl, total=total) r.append(d) return r
class ReversalByQuery(InvoiceQuery): def __init__(self, invoice_id): self.invoice_id = FixLength(INVOICE_ID) self.invoice_id.set_raw(invoice_id) InvoiceQuery.__init__(self, self.invoice_id['Tahun'], self.invoice_id['SPT No']) self.payment = self.invoice and self.get_payment() def set_unpaid(self): InvoiceQuery.set_unpaid(self) self.DBSession.commit()
class ReversalByQuery(InvoiceQuery): def __init__(self, invoice_id): self.invoice_id = FixLength(INVOICE_ID) self.invoice_id.set_raw(invoice_id) InvoiceQuery.__init__( self, self.invoice_id['Tahun'], self.invoice_id['SPT No']) self.payment = self.invoice and self.get_payment() def set_unpaid(self): InvoiceQuery.set_unpaid(self) self.DBSession.commit()
class Invoice(Query): def __init__(self, models, iso_models, DBSession, invoice_id_raw): Query.__init__(self, models, iso_models, DBSession) self.invoice_id_raw = invoice_id_raw self.invoice_id = FixLength(INVOICE_ID) self.invoice_id.set_raw(invoice_id_raw) q = self.query_invoice(self.invoice_id['Tahun'], self.invoice_id['SPT No']) self.invoice = q.first() def is_paid(self): return self.invoice.status_pembayaran == 1 def get_payment(self): return Query.get_payment(self, self.invoice)
class Invoice(Query): def __init__(self, models, iso_models, DBSession, invoice_id_raw): Query.__init__(self, models, iso_models, DBSession) self.invoice_id_raw = invoice_id_raw self.invoice_id = FixLength(INVOICE_ID) self.invoice_id.set_raw(invoice_id_raw) q = self.query_invoice( self.invoice_id['Tahun'], self.invoice_id['SPT No']) self.invoice = q.first() def is_paid(self): return self.invoice.status_pembayaran == 1 def get_payment(self): return Query.get_payment(self, self.invoice)
class BaseResponse(object): def __init__(self, parent): self.parent = parent self.invoice_id = FixLength(INVOICE_ID) self.invoice_id.set_raw(parent.from_iso.get_invoice_id()) self.invoice_id_raw = self.invoice_id.get_raw() def is_transaction_owner(self, pay): conf = host[self.parent.conf['name']] return pay.kd_kanwil == conf['kd_kanwil'] and \ pay.kd_kantor == conf['kd_kantor'] and \ pay.kd_tp == conf['kd_tp'] def commit(self): DBSession.commit() self.parent.ack()
class BaseResponse(object): def __init__(self, parent): self.parent = parent self.invoice_id = FixLength(INVOICE_ID) self.invoice_id_raw = parent.from_iso.get_invoice_id() self.invoice_id.set_raw(self.invoice_id_raw) def is_transaction_owner(self, pay): conf = host[self.parent.conf['name']] return pay.kd_kanwil == conf['kd_kanwil'] and \ pay.kd_kantor == conf['kd_kantor'] and \ pay.kd_tp == conf['kd_tp'] def commit(self): DBSession.commit() self.parent.ack()
class BaseResponse(object): def __init__(self, parent): self.parent = parent self.invoice_id_raw = parent.from_iso.get_invoice_id() self.invoice_id = FixLength(self.get_invoice_id_structure()) self.invoice_id.set_raw(self.invoice_id_raw) def get_invoice_id_structure(self): return INVOICE_ID def is_transaction_owner(self, iso_pay): conf = host[self.parent.conf['name']] return iso_pay.bank_id == conf['id'] def commit(self): DBSession.commit() self.parent.ack()
class Invoice(Query): def __init__(self, models, DBSession, invoice_id_raw): Query.__init__(self, models, DBSession) self.invoice_id_raw = invoice_id_raw self.invoice_id = FixLength(INVOICE_ID) self.invoice_id.set_raw(invoice_id_raw) self.invoice = False try: kode = int(self.invoice_id['Kode']) except TypeError: return except ValueError: return q = self.query_invoice(self.invoice_id['Tahun'], str(kode), self.invoice_id['SSPD No']) self.invoice = q.first() def is_paid(self): return self.invoice.status_pembayaran == 1 def get_payment(self): return Query.get_payment(self, self.invoice)
class BaseResponse(object): def __init__(self, parent): self.parent = parent self.invoice_id = FixLength(INVOICE_ID) self.invoice_id.set_raw(parent.from_iso.get_invoice_id()) self.invoice_id_raw = self.invoice_id.get_raw() def is_transaction_owner(self, pay): conf = host[self.parent.conf['name']] if pay.kd_kanwil != conf['kd_kanwil']: return if pay.kd_kantor != conf['kd_kantor']: return kd_tp = conf['kd_tp'] if isinstance(kd_tp, dict): if pay.kd_tp in kd_tp.values(): return True elif pay.kd_tp == kd_tp: return True def commit(self): DBSession.commit() self.parent.ack() def nama_kelurahan(self): return self.query.cari_kelurahan(self.invoice_id['Propinsi'], self.invoice_id['Kabupaten'], self.invoice_id['Kecamatan'], self.invoice_id['Kelurahan']) def nama_kecamatan(self): return self.query.cari_kecamatan(self.invoice_id['Propinsi'], self.invoice_id['Kabupaten'], self.invoice_id['Kecamatan']) def nama_propinsi(self): return self.query.cari_propinsi(self.invoice_id['Propinsi'])
def get_cabang(self): f = FixLength(CABANG) f.set_raw(self.get_value(107)) return f
def get_invoice_id(raw): invoice_id = FixLength(INVOICE_ID) invoice_id.set_raw(raw) return invoice_id
def __init__(self, invoice_id_raw): invoice_id = FixLength(self.get_invoice_id_structure()) invoice_id.set_raw(invoice_id_raw) Reversal.__init__(self, models, DBSession, invoice_id)
class DbTransaction(Transaction): def __init__(self, *args, **kwargs): self.invoice_profile = FixLength(INVOICE_PROFILE) Transaction.__init__(self, *args, **kwargs) # Override def get_bit_definition(self): return TRANSACTION_BITS # Override def get_inquiry_codes(self): return (INQUIRY_CODE, ) # Override def get_payment_codes(self): return (PAYMENT_CODE, ) # Override def get_methods(self): return { INQUIRY_CODE: 'inquiry_request_handler', PAYMENT_CODE: 'payment_request_handler', } # Override def set_transaction_response(self): self.setMTI('0210') # Sesuai kolom yang berisi E (Equal) pada dokumentasi self.copy([2, 3, 7, 11, 12, 13, 15, 18, 37, 41, 48, 90]) raw = self.get_invoice_profile() self.invoice_profile.set_raw(raw) # Override # Ini dipanggil dengan from_iso. def get_invoice_id(self): raw = self.get_invoice_profile() self.invoice_profile.set_raw(raw) bank_invoice_id_raw = self.invoice_profile['ID Billing'].strip() return bank_invoice_id_raw[2:] def inquiry_request_handler(self): self.transaction_request_handler('inquiry') def payment_request_handler(self): self.transaction_request_handler('payment') def jenis_pajak(self): self.invoice_id_raw = self.get_invoice_id() length = len(self.invoice_id_raw) if length == 12: return 'bphtb' elif length == 10: return 'padl' self.ack_invalid_number() def transaction_request_handler(self, name): jenis_pajak = self.jenis_pajak() if not jenis_pajak: return func_name = '{j}_{n}_request_handler'.format(j=jenis_pajak, n=name) func = getattr(self, func_name) func() def get_invoice_profile(self): return self.get_value(48) # Override def set_invoice_profile(self, raw=None): raw = self.invoice_profile.get_raw() self.setBit(48, raw) # Override def set_ntp(self, ntp): self.invoice_profile['NTPD'] = ntp # Override def get_cabang(self): return dict(kode=None, user=None) # Override def get_ntb(self): return self.get_value(90).lstrip('0') # Override def is_reversal_request(self): ok = BaseTransaction.is_reversal_request(self) if not ok: return jenis_pajak = self.jenis_pajak() if jenis_pajak: return '{j}_reversal_request_handler'.format(j=jenis_pajak) def bphtb_inquiry_request_handler(self): try: bphtb.inquiry(self) except: self.ack_unknown() def bphtb_payment_request_handler(self): try: bphtb.payment(self) except: self.ack_unknown() def padl_inquiry_request_handler(self): try: padl.inquiry(self) except: self.ack_unknown() def padl_payment_request_handler(self): try: padl.payment(self) except: self.ack_unknown() # Override def bphtb_reversal_request_handler(self): try: bphtb.reversal(self) except: self.ack_unknown() # Override def padl_reversal_request_handler(self): try: padl.reversal(self) except: self.ack_unknown() def ack_invalid_length(self): msg = ERR_INVALID_LENGTH.format(id=self.invoice_id_raw) self.ack(RC_INVALID_NUMBER, msg) # Override def ack_already_paid(self): msg = ERR_ALREADY_PAID.format( invoice_id=self.from_iso.get_invoice_id()) self.ack(RC_ALREADY_PAID, msg) # Override def ack_not_available(self): msg = ERR_NOT_AVAILABLE.format( invoice_id=self.from_iso.get_invoice_id()) self.ack(RC_NOT_AVAILABLE, msg)