Commit 1c0d1eaa by Owo Sugiana

Tambah pengenalan tabel gw_payment di PBB

1 parent 7c8c468c
3.1.8 2025-05-19
----------------
- Tambah pengenalan tabel gw_payment di PBB
3.1.7 2025-02-27 3.1.7 2025-02-27
---------------- ----------------
- Tambah PKB - Tambah PKB
......
...@@ -198,6 +198,10 @@ class Pbb(Base, Common): ...@@ -198,6 +198,10 @@ class Pbb(Base, Common):
user_id = Column(String(16)) user_id = Column(String(16))
# Bit 32 # Bit 32
bank_id = Column(String(4)) bank_id = Column(String(4))
# pembayaran_sppt.kd_tp
kd_tp = Column(String(2))
# NOP + tahun
sppt_id = Column(String(22), nullable=False)
tgl_batal = Column(DateTime(timezone=True)) tgl_batal = Column(DateTime(timezone=True))
__table_args__ = ( __table_args__ = (
UniqueConstraint( UniqueConstraint(
......
...@@ -6,6 +6,8 @@ from sqlalchemy import ( ...@@ -6,6 +6,8 @@ from sqlalchemy import (
Column, Column,
Integer, Integer,
String, String,
DateTime,
Text,
UniqueConstraint, UniqueConstraint,
func, func,
) )
...@@ -36,6 +38,7 @@ from ..common import ( ...@@ -36,6 +38,7 @@ from ..common import (
VaPayment, VaPayment,
InvalidSource, InvalidSource,
str2dict, str2dict,
BIT_18_NAMES,
) )
...@@ -89,6 +92,19 @@ class JsonLog(Base): ...@@ -89,6 +92,19 @@ class JsonLog(Base):
dict(schema='public')) dict(schema='public'))
class ApiLog(Base):
__tablename__ = 'gw_payment'
id = Column(Integer, primary_key=True)
tgl = Column(DateTime(timezone=True), nullable=True)
bit_004 = Column(Text, nullable=False) # Nilai transaksi
bit_011 = Column(Text, nullable=False) # STAN
bit_018 = Column(Text, nullable=False) # Channel
bit_032 = Column(Text, nullable=False) # Bank
bit_037 = Column(Text, nullable=False) # NTB
bit_047 = Column(Text, nullable=False) # NTP
bit_061 = Column(Text, nullable=False) # Invoice ID
class App(BaseApp): class App(BaseApp):
conf_name = 'pbb payment last date' conf_name = 'pbb payment last date'
report_orm = Pbb report_orm = Pbb
...@@ -140,6 +156,12 @@ class App(BaseApp): ...@@ -140,6 +156,12 @@ class App(BaseApp):
self.base_q_json = self.json_session.query(JsonLog) self.base_q_json = self.json_session.query(JsonLog)
else: else:
self.json_session = None self.json_session = None
if 'api_db_url' in self.conf:
factory = self.get_factory('api_db_url')
self.api_session = factory()
self.base_q_api = self.api_session.query(ApiLog)
else:
self.api_session = None
def get_log_model(self): def get_log_model(self):
return self.is_universal_log and UniversalLog or Log return self.is_universal_log and UniversalLog or Log
...@@ -205,7 +227,7 @@ class App(BaseApp): ...@@ -205,7 +227,7 @@ class App(BaseApp):
self.warning_date(psppt) self.warning_date(psppt)
return return
row_pay, row_inq = row row_pay, row_inq = row
iso = get_iso(row_pay.iso_request, Doc, self.option.debug) iso = get_iso(row_pay.iso_request, Doc)
info = get_channel_info_by_iso(iso) info = get_channel_info_by_iso(iso)
try: try:
user_id = iso.getBit(107) user_id = iso.getBit(107)
...@@ -264,6 +286,17 @@ class App(BaseApp): ...@@ -264,6 +286,17 @@ class App(BaseApp):
nama = get_channel_name_by_dict(d) nama = get_channel_name_by_dict(d)
return kode, nama, d['bit_011'], row.ntb, kode return kode, nama, d['bit_011'], row.ntb, kode
def get_api(self, psppt):
if not self.api_session:
return
q = self.base_q_api.filter_by(bit_059='4', bit_061=self.invoice_id)
q = q.order_by(ApiLog.id.desc())
row = q.first()
if not row:
return
channel_nama = BIT_18_NAMES[row.bit_018]
return row.bit_018, channel_nama, row.bit_011, row.bit_037, row.bit_032
def get_source(self, psppt): def get_source(self, psppt):
source = self.get_iso_v2() source = self.get_iso_v2()
tgl_inquiry = user_id = stan = ntb = bank_id = None tgl_inquiry = user_id = stan = ntb = bank_id = None
...@@ -279,12 +312,16 @@ class App(BaseApp): ...@@ -279,12 +312,16 @@ class App(BaseApp):
if source: if source:
channel_kode, channel_nama, stan, ntb, bank_id = source channel_kode, channel_nama, stan, ntb, bank_id = source
else: else:
channel_kode = '0000' source = self.get_api(psppt)
tgl = psppt.tgl_rekam_byr_sppt.date() if source:
channel_nama = self.get_va_channel(tgl) channel_kode, channel_nama, stan, ntb, bank_id = source
if not channel_nama: else:
kd_tp = psppt.kd_tp.strip() channel_kode = '0000'
channel_nama = self.kd_tp.get(kd_tp, 'MANUAL') tgl = psppt.tgl_rekam_byr_sppt.date()
channel_nama = self.get_va_channel(tgl)
if not channel_nama:
kd_tp = psppt.kd_tp.strip()
channel_nama = self.kd_tp.get(kd_tp, 'MANUAL')
return channel_kode, channel_nama, stan, ntb, bank_id, user_id, \ return channel_kode, channel_nama, stan, ntb, bank_id, user_id, \
tgl_inquiry tgl_inquiry
...@@ -320,7 +357,8 @@ class App(BaseApp): ...@@ -320,7 +357,8 @@ class App(BaseApp):
tgl_rekam_byr_sppt=psppt.tgl_rekam_byr_sppt, tgl_rekam_byr_sppt=psppt.tgl_rekam_byr_sppt,
nm_wp_sppt=sppt.nm_wp_sppt, channel_kode=channel_kode, nm_wp_sppt=sppt.nm_wp_sppt, channel_kode=channel_kode,
channel_nama=channel_nama, bank_id=bank_id, user_id=user_id, channel_nama=channel_nama, bank_id=bank_id, user_id=user_id,
pbb_yg_harus_dibayar_sppt=pokok) pbb_yg_harus_dibayar_sppt=pokok, kd_tp=psppt.kd_tp,
sppt_id=self.invoice_id)
def get_report(self, psppt): # Override def get_report(self, psppt): # Override
q = self.rpt_session.query(Pbb).filter_by( q = self.rpt_session.query(Pbb).filter_by(
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!