Commit 82a43b4d by Owo Sugiana

Tambah models pada konfigurasi PBB

1 parent 2fc8c3bc
0.1.2 13-4-2021 0.1.2 13-4-2021
--------------- ---------------
- Penambahan models pada konfigurasi PBB yang berisi nama modul untuk ORM Sppt
dan PembayaranSppt
- Penambahan field pada PBB - Penambahan field pada PBB
- Pada PBB field user_id boleh NULL
0.1.1 3-4-2021 0.1.1 3-4-2021
-------------- --------------
......
...@@ -123,7 +123,8 @@ Berikan hak akses yang diperlukan user ``report``:: ...@@ -123,7 +123,8 @@ Berikan hak akses yang diperlukan user ``report``::
Lalu buat file konfigurasi bernama ``pbb.ini``:: Lalu buat file konfigurasi bernama ``pbb.ini``::
[main] [main]
module = opensipkd.iso8583.bjb.bphtb.default module = opensipkd.iso8583.bjb.pbb.default
models = sismiop.models.default
db_url = postgresql://report:password@localhost:5434/pbb db_url = postgresql://report:password@localhost:5434/pbb
report_db_url = postgresql://report:password@localhost:5434/payment_report report_db_url = postgresql://report:password@localhost:5434/payment_report
pid_file = /home/sugiana/tmp/pbb-report.pid pid_file = /home/sugiana/tmp/pbb-report.pid
......
...@@ -2,3 +2,4 @@ ALTER TABLE pbb_report ADD pbb_yg_harus_dibayar_sppt float; ...@@ -2,3 +2,4 @@ ALTER TABLE pbb_report ADD pbb_yg_harus_dibayar_sppt float;
ALTER TABLE pbb_report ALTER jml_sppt_yg_dibayar TYPE bigint; ALTER TABLE pbb_report ALTER jml_sppt_yg_dibayar TYPE bigint;
ALTER TABLE pbb_report ADD denda_sppt bigint; ALTER TABLE pbb_report ADD denda_sppt bigint;
ALTER TABLE pbb_report ADD tgl_inquiry timestamp with time zone; ALTER TABLE pbb_report ADD tgl_inquiry timestamp with time zone;
ALTER TABLE pbb_report ALTER user_id DROP NOT NULL;
...@@ -141,7 +141,7 @@ class Pbb(Base): ...@@ -141,7 +141,7 @@ class Pbb(Base):
# Bit 41 / 42 / 43 # Bit 41 / 42 / 43
channel_nama = Column(String(32), nullable=False) channel_nama = Column(String(32), nullable=False)
# Bit 107 # Bit 107
user_id = Column(String(8), nullable=False) user_id = Column(String(8))
tgl_batal = Column(DateTime(timezone=True)) tgl_batal = Column(DateTime(timezone=True))
__table_args__ = dict( __table_args__ = dict(
UniqueConstraint('stan', 'ntb'), UniqueConstraint('stan', 'ntb'),
......
...@@ -191,20 +191,21 @@ class BaseApp: ...@@ -191,20 +191,21 @@ class BaseApp:
def __init__(self, argv): def __init__(self, argv):
self.option = get_option(argv) self.option = get_option(argv)
conf = ConfigParser() cp = ConfigParser()
conf.read(self.option.conf) cp.read(self.option.conf)
cf = conf['main'] self.conf = cp['main']
self.pid = make_pid_file(cf['pid_file']) self.pid = make_pid_file(self.conf['pid_file'])
if not self.pid: if not self.pid:
return return
self.log = create_log(cf['log_file']) self.log = create_log(self.conf['log_file'])
module_name = cf['module'] module_name = self.conf['module']
self.module = get_module_object(module_name) self.module = get_module_object(module_name)
module_conf = dict(cf) module_conf = dict(self.conf)
self.module.init(module_conf) self.module.init(module_conf)
self.prod_session = self.get_db_session() self.prod_session = self.get_db_session()
self.prod_session.bind.echo = self.option.debug_sql self.prod_session.bind.echo = self.option.debug_sql
engine = create_engine(cf['report_db_url'], echo=self.option.debug_sql) engine = create_engine(
self.conf['report_db_url'], echo=self.option.debug_sql)
factory = sessionmaker(bind=engine) factory = sessionmaker(bind=engine)
self.rpt_session = factory() self.rpt_session = factory()
register(self.rpt_session) register(self.rpt_session)
......
import sys import sys
from ISO8583.ISO8583 import BitNotSet
import transaction import transaction
from opensipkd.string import ( from opensipkd.string import (
FixLength, FixLength,
...@@ -8,16 +9,10 @@ from opensipkd.waktu import ( ...@@ -8,16 +9,10 @@ from opensipkd.waktu import (
dmyhms, dmyhms,
create_datetime, create_datetime,
) )
from sismiop.models.default import (
Sppt,
PembayaranSppt,
)
from sismiop.services.base import get_db_session from sismiop.services.base import get_db_session
from opensipkd.iso8583.bjb.scripts.common import get_module_object
from opensipkd.iso8583.bjb.pbb import Doc from opensipkd.iso8583.bjb.pbb import Doc
from opensipkd.iso8583.bjb.pbb.structure import ( from opensipkd.iso8583.bjb.pbb.structure import INVOICE_PROFILE
INVOICE_ID,
INVOICE_PROFILE,
)
from ..models import Pbb from ..models import Pbb
from .common import ( from .common import (
get_iso, get_iso,
...@@ -30,12 +25,6 @@ ERR_NOT_FOUND = 'Tgl {tgl_bayar} SPPT ID {invoice_id} '\ ...@@ -30,12 +25,6 @@ ERR_NOT_FOUND = 'Tgl {tgl_bayar} SPPT ID {invoice_id} '\
'tidak ada di pembayaran_sppt' 'tidak ada di pembayaran_sppt'
def get_inv_id(iso):
inv_id = FixLength(INVOICE_ID)
inv_id.set_raw(iso.get_invoice_id())
return inv_id
def get_profile(iso): def get_profile(iso):
p = FixLength(INVOICE_PROFILE) p = FixLength(INVOICE_PROFILE)
p.set_raw(iso.get_invoice_profile()) p.set_raw(iso.get_invoice_profile())
...@@ -51,6 +40,13 @@ def get_tgl_bayar(iso, year): ...@@ -51,6 +40,13 @@ def get_tgl_bayar(iso, year):
int(t['minute']), int(t['second'])) int(t['minute']), int(t['second']))
def get_user_id(iso):
try:
return iso.getBit(107)
except BitNotSet:
return
class App(BaseApp): class App(BaseApp):
iso_class = Doc iso_class = Doc
report_orm = Pbb report_orm = Pbb
...@@ -66,8 +62,11 @@ class App(BaseApp): ...@@ -66,8 +62,11 @@ class App(BaseApp):
self.base_q_iso = self.prod_session.query( self.base_q_iso = self.prod_session.query(
self.iso_payment_orm, self.iso_inquiry_orm).filter( self.iso_payment_orm, self.iso_inquiry_orm).filter(
self.iso_payment_orm.inquiry_id == self.iso_inquiry_orm.id) self.iso_payment_orm.inquiry_id == self.iso_inquiry_orm.id)
self.base_q_psppt = self.prod_session.query(PembayaranSppt) self.models = get_module_object(self.conf['models'])
self.base_q_sppt = self.prod_session.query(Sppt) self.PembayaranSppt = self.models.PembayaranSppt
self.Sppt = self.models.Sppt
self.base_q_psppt = self.prod_session.query(self.PembayaranSppt)
self.base_q_sppt = self.prod_session.query(self.Sppt)
def get_db_session(self): # Override def get_db_session(self): # Override
return get_db_session() return get_db_session()
...@@ -82,7 +81,7 @@ class App(BaseApp): ...@@ -82,7 +81,7 @@ class App(BaseApp):
no_urut=p['Urut'], no_urut=p['Urut'],
kd_jns_op=p['Jenis'], kd_jns_op=p['Jenis'],
thn_pajak_sppt=p['Tahun']).order_by( thn_pajak_sppt=p['Tahun']).order_by(
PembayaranSppt.pembayaran_sppt_ke.desc()) self.PembayaranSppt.pembayaran_sppt_ke.desc())
return q.first() return q.first()
def get_sppt(self, p): def get_sppt(self, p):
...@@ -97,10 +96,23 @@ class App(BaseApp): ...@@ -97,10 +96,23 @@ class App(BaseApp):
thn_pajak_sppt=p['Tahun']) thn_pajak_sppt=p['Tahun'])
return q.first() return q.first()
def __get_query_iso(self, last):
q_iso = self.base_q_iso.filter(self.iso_inquiry_orm.id > last.as_int())
return q_iso.order_by(self.iso_inquiry_orm.id)
def __log_not_found(self, s_tgl, d):
msg = ERR_NOT_FOUND.format(
tgl_bayar=s_tgl, invoice_id=d['nomor_bayar'])
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"]}')
def __run_payment(self): def __run_payment(self):
last = self.get_last_id('pbb payment last id') last = self.get_last_id('pbb payment last id')
q_iso = self.base_q_iso.filter(self.iso_inquiry_orm.id > last.as_int()) q_iso = self.__get_query_iso(last)
q_iso = q_iso.order_by(self.iso_inquiry_orm.id)
found = False found = False
for row_pay, row_inq in q_iso.limit(1000): for row_pay, row_inq in q_iso.limit(1000):
iso = get_iso(row_pay.iso_request, Doc, self.option.debug) iso = get_iso(row_pay.iso_request, Doc, self.option.debug)
...@@ -112,15 +124,11 @@ class App(BaseApp): ...@@ -112,15 +124,11 @@ class App(BaseApp):
p = get_profile(iso) p = get_profile(iso)
psppt = self.get_psppt(p) psppt = self.get_psppt(p)
if not psppt: if not psppt:
msg = ERR_NOT_FOUND.format( self.__log_not_found(s_tgl, d)
tgl_bayar=s_tgl, invoice_id=d['nomor_bayar'])
self.log.error(msg)
continue continue
sppt = self.get_sppt(p) sppt = self.get_sppt(p)
self.log.info( self.__log_progress(s_tgl, d)
f'Tgl bayar {s_tgl}, Nomor bayar {d["nomor_bayar"]}, ' user_id = get_user_id(iso)
f'STAN {d["stan"]}, NTB {d["ntb"]}, Channel {d["channel"]}')
inv_id = get_inv_id(iso)
rpt = Pbb( rpt = Pbb(
stan=d['stan'], ntb=d['ntb'], kd_propinsi=p['Propinsi'], stan=d['stan'], ntb=d['ntb'], kd_propinsi=p['Propinsi'],
kd_dati2=p['Kabupaten'], kd_kecamatan=p['Kecamatan'], kd_dati2=p['Kabupaten'], kd_kecamatan=p['Kecamatan'],
...@@ -131,15 +139,12 @@ class App(BaseApp): ...@@ -131,15 +139,12 @@ class App(BaseApp):
jml_sppt_yg_dibayar=iso.get_amount(), jml_sppt_yg_dibayar=iso.get_amount(),
denda_sppt=psppt.denda_sppt, denda_sppt=psppt.denda_sppt,
tgl_pembayaran_sppt=tgl_bayar.date(), tgl_pembayaran_sppt=tgl_bayar.date(),
tgl_rekam_byr_sppt=tgl_bayar, tgl_rekam_byr_sppt=tgl_bayar, nm_wp_sppt=p['Nama'],
nm_wp_sppt=p['Nama'],
channel_kode=iso.get_channel().strip(), channel_kode=iso.get_channel().strip(),
channel_nama=d['channel'], channel_nama=d['channel'], user_id=user_id,
user_id=iso.getBit(107),
pbb_yg_harus_dibayar_sppt=sppt.pbb_yg_harus_dibayar_sppt, pbb_yg_harus_dibayar_sppt=sppt.pbb_yg_harus_dibayar_sppt,
tgl_inquiry=row_inq.tgl) tgl_inquiry=row_inq.tgl)
last.nilai = str(row_inq.id) last.nilai = str(row_inq.id)
print(f'last.nilai {last.nilai}')
with transaction.manager: with transaction.manager:
self.rpt_session.add(rpt) self.rpt_session.add(rpt)
self.rpt_session.add(last) self.rpt_session.add(last)
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!