Commit d7048d52 by Owo Sugiana

Bug fixed saat tabel pembayaran_sppt tidak memiliki field discount

1 parent 559cf5cb
0.1.5 16-6-2021
---------------
- Bug fixed saat tabel pembayaran_sppt tidak memiliki field discount
- Log PBB disertai nilai bit terkait untuk memudahkan analisa nama channel
0.1.4 27-5-2021
---------------
- Tambah channel BAYARIN
......
......@@ -150,7 +150,9 @@ class Pbb(Base, Common):
# Bit 41 / 42 / 43
channel_nama = Column(String(32), nullable=False)
# Bit 107
user_id = Column(String(8))
user_id = Column(String(16))
# Bit 32
bank_id = Column(String(4))
tgl_batal = Column(DateTime(timezone=True))
__table_args__ = dict(
UniqueConstraint('stan', 'ntb'),
......
import sys
from sqlalchemy import (
Column,
Integer,
DateTime,
String,
Date,
ForeignKey,
)
import transaction
from opensipkd.waktu import dmyhms
from opensipkd.bphtb.models.default import (
IsoPayment,
IsoReversal,
Payment,
Invoice,
Perolehan,
......@@ -24,6 +30,32 @@ from .common import (
)
class IsoPayment(Base):
__tablename__ = 'bphtb_payment'
__table_args__ = dict(schema='bphtb')
id = Column(Integer, ForeignKey(Payment.id), primary_key=True)
tgl = Column(DateTime(timezone=True), nullable=False)
iso_request = Column(String(1024), nullable=False)
transmission = Column(DateTime(timezone=True), nullable=False)
settlement = Column(Date, nullable=False)
stan = Column(Integer, nullable=False)
invoice_id = Column(Integer, ForeignKey(Invoice.id), nullable=False)
invoice_no = Column(String(32), nullable=False)
ntb = Column(String(32), nullable=False)
ntp = Column(String(32), nullable=False, unique=True)
bank_id = Column(Integer)
channel_id = Column(Integer)
bank_ip = Column(String(15), nullable=False)
class IsoReversal(Base):
__tablename__ = 'bphtb_reversal'
__table_args__ = dict(schema='bphtb')
id = Column(Integer, ForeignKey(IsoPayment.id), primary_key=True)
tgl = Column(DateTime(timezone=True), nullable=False)
iso_request = Column(String(1024), nullable=False)
class App(BaseApp):
iso_class = Doc
report_orm = Bphtb
......
......@@ -14,7 +14,7 @@ from sqlalchemy.orm import sessionmaker
import transaction
from zope.sqlalchemy import register
from opensipkd.waktu import dmyhms
from iso8583_web.models.conf import Conf as BaseConf
from opensipkd.views.models import Conf as BaseConf
from opensipkd.iso8583.bjb.scripts.common import get_module_object
from ..models import Base
......@@ -106,12 +106,22 @@ def get_channel_name(bit_018, bit_041, bit_042, bit_043):
return 'LAINNYA'
def get_channel_name_by_iso(iso):
try:
return get_channel_name(
def get_channel_info_by_iso(iso):
d = dict()
lengkap = True
for bit in (18, 32, 41, 42, 43):
bit_name = f'bit_{bit}'
try:
d[bit_name] = iso.getBit(bit)
except BitNotSet:
lengkap = False
continue
if lengkap:
d['channel'] = get_channel_name(
iso.getBit(18), iso.getBit(41), iso.getBit(42), iso.getBit(43))
except BitNotSet:
return 'LAINNYA'
else:
d['channel'] = 'LAINNYA'
return d
def get_channel_name_by_row(row):
......@@ -119,11 +129,12 @@ def get_channel_name_by_row(row):
def get_keys(iso):
return dict(
d = get_channel_info_by_iso(iso)
d.update(dict(
nomor_bayar=iso.get_invoice_id().strip(),
stan=iso.get_stan().strip(),
ntb=iso.get_ntb().strip(),
channel=get_channel_name_by_iso(iso))
ntb=iso.get_ntb().strip()))
return d
def create_log(log_file):
......
......@@ -117,9 +117,27 @@ class App(BaseApp):
self.log.error(msg)
def __log_progress(self, s_tgl, d):
self.log.info(
f'Tgl bayar {s_tgl}, Nomor bayar {d["nomor_bayar"]}, '
f'STAN {d["stan"]}, NTB {d["ntb"]}, Channel {d["channel"]}')
self.log.info(f'Tgl bayar {s_tgl}, {d}')
def __create_data(self, row_inq, iso, d, tgl_bayar, psppt):
sppt = self.get_sppt(psppt)
nama_wp = get_nama_wp(iso, sppt)
user_id = get_user_id(iso)
discount = hasattr(psppt, 'discount') and psppt.discount or None
return dict(
stan=d['stan'], ntb=d['ntb'],
kd_propinsi=psppt.kd_propinsi, kd_dati2=psppt.kd_dati2,
kd_kecamatan=psppt.kd_kecamatan, kd_kelurahan=psppt.kd_kelurahan,
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,
jml_sppt_yg_dibayar=iso.get_amount(),
denda_sppt=psppt.denda_sppt, tgl_pembayaran_sppt=tgl_bayar.date(),
tgl_rekam_byr_sppt=tgl_bayar, nm_wp_sppt=nama_wp,
channel_kode=iso.get_channel().strip(), channel_nama=d['channel'],
user_id=user_id,
pbb_yg_harus_dibayar_sppt=sppt.pbb_yg_harus_dibayar_sppt,
tgl_inquiry=row_inq.tgl, discount=discount, bank_id=d['bit_32'])
def __run_payment(self):
last = self.get_last_id('pbb payment last id')
......@@ -136,26 +154,9 @@ class App(BaseApp):
if not psppt:
self.__log_not_found(s_tgl, d)
continue
sppt = self.get_sppt(psppt)
nama_wp = get_nama_wp(iso, sppt)
user_id = get_user_id(iso)
self.__log_progress(s_tgl, d)
rpt = Pbb(
stan=d['stan'], ntb=d['ntb'],
kd_propinsi=psppt.kd_propinsi,
kd_dati2=psppt.kd_dati2, kd_kecamatan=psppt.kd_kecamatan,
kd_kelurahan=psppt.kd_kelurahan, 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,
jml_sppt_yg_dibayar=iso.get_amount(),
denda_sppt=psppt.denda_sppt,
tgl_pembayaran_sppt=tgl_bayar.date(),
tgl_rekam_byr_sppt=tgl_bayar, nm_wp_sppt=nama_wp,
channel_kode=iso.get_channel().strip(),
channel_nama=d['channel'], user_id=user_id,
pbb_yg_harus_dibayar_sppt=sppt.pbb_yg_harus_dibayar_sppt,
tgl_inquiry=row_inq.tgl, discount=psppt.discount)
d = self.__create_data(row_inq, iso, d, tgl_bayar, psppt)
rpt = Pbb(**d)
last.nilai = str(row_inq.id)
with transaction.manager:
self.rpt_session.add(rpt)
......@@ -175,26 +176,8 @@ class App(BaseApp):
if not psppt:
self.__log_not_found(s_tgl, d)
continue
sppt = self.get_sppt(psppt)
nama_wp = get_nama_wp(iso, sppt)
user_id = get_user_id(iso)
self.__log_progress(s_tgl, d)
d = dict(
stan=d['stan'], ntb=d['ntb'],
kd_propinsi=psppt.kd_propinsi,
kd_dati2=psppt.kd_dati2, kd_kecamatan=psppt.kd_kecamatan,
kd_kelurahan=psppt.kd_kelurahan, 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,
jml_sppt_yg_dibayar=iso.get_amount(),
denda_sppt=psppt.denda_sppt,
tgl_pembayaran_sppt=tgl_bayar.date(),
tgl_rekam_byr_sppt=tgl_bayar, nm_wp_sppt=nama_wp,
channel_kode=iso.get_channel().strip(),
channel_nama=d['channel'], user_id=user_id,
pbb_yg_harus_dibayar_sppt=sppt.pbb_yg_harus_dibayar_sppt,
tgl_inquiry=row_inq.tgl, discount=psppt.discount)
d = self.__create_data(row_inq, iso, d, tgl_bayar, psppt)
rpt = self.get_report(iso)
if not rpt:
rpt = Pbb()
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!