Commit b197bc90 by Owo Sugiana

nip_pospbb optional

1 parent 9a543323
2.0 2022-07-30
2.0 2022-08-02
--------------
- Perbedaan utama dari versi 0.x adalah kini berangkat dari tabel aslinya dan
bukan dari tabel ISO8583 karena sudah memperhatikan channel MANUAL (input
......@@ -6,3 +6,4 @@
- Memahami channel VA dan QRIS
- Menyimpan log file dari Cartenz ke tabel log_file
- Menerjemahkan log_file menjadi log_iso
- nip_pospbb optional
......@@ -3,5 +3,5 @@ models = opensipkd.iso8583.bjb.pbb.models
service = opensipkd.iso8583.bjb.pbb.doc
db_url = postgresql://cartenz:pass@localhost/h2h_pbb
report_db_url = postgresql://pcpd:pass@localhost/pcpd
pid_file = /home/sugiana/tmp/pbb-log.pid
log_file = /home/sugiana/log/pbb-log.log
pid_file = /home/sugiana/tmp/pbb-iso.pid
log_file = /home/sugiana/log/pbb-iso.log
......@@ -177,7 +177,7 @@ class Pbb(Base, Common):
# Bit 7 / Transmission DateTime
tgl_rekam_byr_sppt = Column(DateTime(timezone=True), nullable=False)
# Bit 62 / Invoice Profile
nm_wp_sppt = Column(String(30), nullable=False)
nm_wp_sppt = Column(String(50), nullable=False)
# Bit 18
channel_kode = Column(String(4), nullable=False)
# Bit 41 / 42 / 43
......@@ -189,7 +189,7 @@ class Pbb(Base, Common):
tgl_batal = Column(DateTime(timezone=True))
__table_args__ = dict(
UniqueConstraint(
'kd_propinsi', 'kd_dati2', 'kd_kecamatan', 'kd_kelurahan',
'kd_blok', 'no_urut', 'kd_jns_op', 'thn_pajak_sppt'),
kd_propinsi, kd_dati2, kd_kecamatan, kd_kelurahan,
kd_blok, no_urut, kd_jns_op, thn_pajak_sppt,
pembayaran_sppt_ke),
)
......@@ -51,8 +51,10 @@ class App(BaseApp):
self.report_orm = Log
if self.conf['models'].find('bphtb') > -1:
self.conf_name = 'bphtb log file last id'
self.pajak = 'bphtb'
else:
self.conf_name = 'pbb log file last id'
self.pajak = 'pbb'
register(self.prod_session)
def get_option(self, argv): # Override
......@@ -88,13 +90,16 @@ class App(BaseApp):
int(year), int(month), int(day), int(hour),
int(minute), int(sec), int(msec)*1000)
iso = self.service.Doc()
iso.setIsoContent(raw[4:].encode('utf-8'))
try:
iso.setIsoContent(raw[4:].encode('utf-8'))
except ValueError as e:
raise InvalidSource('ID {log_file.id} tidak dipahami: {str(e)}')
try:
if iso.getBit(3) != self.service.PAYMENT_CODE:
raise InvalidSource(f'ID {log_file.id} bukan payment')
except BitNotSet:
raise InvalidSource(f'ID {log_file.id} bit 3 tidak ada')
d = dict(mti=iso.getMTI(), created=waktu)
d = dict(id=log_file.id, mti=iso.getMTI(), created=waktu)
for bit in iso.get_bit_definition():
try:
value = iso.getBit(bit)
......@@ -102,9 +107,20 @@ class App(BaseApp):
continue
field = 'bit_{}'.format(str(bit).zfill(3))
d[field] = value
profile = FixLength(self.service.INVOICE_PROFILE)
profile.set_raw(iso.getBit(62))
d['bit_062_data'] = profile.to_dict()
if self.pajak == 'bphtb':
try:
profile = FixLength(self.service.INVOICE_PROFILE)
profile.set_raw(iso.getBit(47))
d['bit_047_data'] = profile.to_dict()
profile = FixLength(self.service.INVOICE_PROFILE2)
profile.set_raw(iso.getBit(48))
d['bit_048_data'] = profile.to_dict()
except BitNotSet:
pass
else:
profile = FixLength(self.service.INVOICE_PROFILE)
profile.set_raw(iso.getBit(62))
d['bit_062_data'] = profile.to_dict()
return d
def get_last_time(self): # Override
......
......@@ -21,10 +21,6 @@ def main(argv=sys.argv[1:]):
append_csv(Conf, 'conf_log2iso.csv', ['nama'])
db_session.commit()
models = get_module_object(conf.get('main', 'models'))
class Log(Base, models.LogMixin):
pass
db_url = conf.get('main', 'db_url')
engine = create_engine(db_url, echo=True)
Base.metadata.create_all(engine)
......@@ -118,16 +118,16 @@ class App(BaseApp):
self.Psppt = self.models.PembayaranSppt
self.Sppt = self.models.Sppt
self.base_q_sppt = self.prod_session.query(self.Sppt)
self.nip_pospbb = self.conf['nip_pospbb']
self.nip_pospbb = self.conf.get('nip_pospbb')
if 'h2h_db_url' in self.conf:
factory = self.get_factory('h2h_db_url')
self.h2h_session = factory()
self.base_q_log = self.get_base_q_log()
else:
try:
self.prod_session.query(Log).first()
self.h2h_session = self.prod_session
self.base_q_log = self.h2h_session.query(Log).filter_by(
mti='0210', bit_003=PAYMENT_CODE, bit_039='00')
self.base_q_log = self.get_base_q_log()
except DatabaseError:
self.h2h_session = None
if 'json_db_url' in self.conf:
......@@ -137,6 +137,10 @@ class App(BaseApp):
else:
self.json_session = None
def get_base_q_log(self):
return self.h2h_session.query(Log).filter_by(
mti='0210', bit_003=PAYMENT_CODE, bit_039='00')
def get_sppt(self, psppt):
q = self.base_q_sppt.filter_by(
kd_propinsi=psppt.kd_propinsi,
......@@ -250,7 +254,9 @@ class App(BaseApp):
channel_kode, channel_nama, stan, ntb, bank_id = source
else:
channel_kode = '0000'
if psppt.nip_rekam_byr_sppt.strip() == self.nip_pospbb:
if self.nip_pospbb and \
psppt.nip_rekam_byr_sppt.strip() == \
self.nip_pospbb:
channel_nama = 'POSPBB'
else:
tgl = psppt.tgl_rekam_byr_sppt.date()
......@@ -266,6 +272,14 @@ class App(BaseApp):
raise InvalidSource(msg)
channel_kode, channel_nama, stan, ntb, bank_id, user_id, \
tgl_inquiry = self.get_source(psppt)
try:
bayar = psppt.jml_sppt_yg_dibayar
denda = psppt.denda_sppt
pokok = sppt.pbb_yg_harus_dibayar_sppt
except AttributeError:
bayar = psppt.jml_pbb_yg_dibayar
denda = psppt.jml_denda_sppt
pokok = sppt.pbb_yg_hrs_dibayar_sppt
discount = hasattr(psppt, 'discount') and psppt.discount or None
tgl = to_date(psppt.tgl_pembayaran_sppt)
if ntb:
......@@ -276,13 +290,13 @@ class App(BaseApp):
kd_blok=psppt.kd_blok, no_urut=psppt.no_urut,
kd_jns_op=psppt.kd_jns_op, thn_pajak_sppt=psppt.thn_pajak_sppt,
pembayaran_sppt_ke=psppt.pembayaran_sppt_ke, stan=stan, ntb=ntb,
jml_sppt_yg_dibayar=psppt.jml_sppt_yg_dibayar,
denda_sppt=psppt.denda_sppt or 0, discount=discount or 0,
tgl_pembayaran_sppt=tgl, tgl_inquiry=tgl_inquiry,
jml_sppt_yg_dibayar=bayar, denda_sppt=denda or 0,
discount=discount or 0, tgl_pembayaran_sppt=tgl,
tgl_inquiry=tgl_inquiry,
tgl_rekam_byr_sppt=psppt.tgl_rekam_byr_sppt,
nm_wp_sppt=sppt.nm_wp_sppt.strip(), channel_kode=channel_kode,
channel_nama=channel_nama, bank_id=bank_id, user_id=user_id,
pbb_yg_harus_dibayar_sppt=sppt.pbb_yg_harus_dibayar_sppt)
pbb_yg_harus_dibayar_sppt=pokok)
def get_report(self, psppt): # Override
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!