Tambah WEBR yang hanya menggunakan tabel log_iso

1 parent 3d4be64b
0.3.2 6-3-2022
--------------
- Script baru WEBR yang tidak mengaitkan dengan tabel ar_payment karena
transaksi melalui web service (Kota Tangerang Selatan)
0.3.1 3-3-2022
--------------
- Tambah PAD JSON (PT POS)
......
......@@ -38,7 +38,7 @@ diperlukan user ``report``::
Lalu buat file konfigurasi bernama ``pad.ini``::
[main]
module = opensipkd.iso8583.bjb.pad.default
models = opensipkd.pad.models.default
db_url = postgresql://report:password@localhost:5432/simpad
report_db_url = postgresql://report:password@localhost:5432/payment_report
pid_file = /home/sugiana/tmp/pad-report.pid
......@@ -74,7 +74,7 @@ Berikan hak akses yang diperlukan user ``report``::
Lalu buat file konfigurasi bernama ``bphtb.ini``::
[main]
module = opensipkd.iso8583.bjb.bphtb.default
models = opensipkd.bphtb.models.default
db_url = postgresql://report:password@localhost:5434/bphtb
report_db_url = postgresql://report:password@localhost:5434/payment_report
pid_file = /home/sugiana/tmp/bphtb-report.pid
......@@ -123,7 +123,6 @@ Berikan hak akses yang diperlukan user ``report``::
Lalu buat file konfigurasi bernama ``pbb.ini``::
[main]
module = opensipkd.iso8583.bjb.pbb.default
models = sismiop.models.default
db_url = postgresql://report:password@localhost:5434/pbb
report_db_url = postgresql://report:password@localhost:5434/payment_report
......
......@@ -15,7 +15,6 @@ from opensipkd.bphtb.models.default import (
Perolehan,
Customer,
)
from opensipkd.bphtb.services.base import get_db_session
from iso8583_web.models.meta import Base as BaseConf
from opensipkd.iso8583.bjb.bphtb import Doc
from ..models import (
......@@ -59,7 +58,6 @@ class IsoReversal(Base):
class App(BaseApp):
iso_class = Doc
report_orm = Bphtb
iso_reversal_orm = IsoReversal
def __init__(self, argv):
super().__init__(argv)
......@@ -70,9 +68,6 @@ class App(BaseApp):
Invoice.ppat_id == Customer.id,
Invoice.perolehan_id == Perolehan.id)
def get_db_session(self): # Override
return get_db_session()
def run_payment(self): # Override
last = self.get_last_id('bphtb payment last id')
q_iso = self.prod_session.query(IsoPayment, Payment).filter(
......@@ -111,6 +106,9 @@ class App(BaseApp):
self.rpt_session.add(rpt)
self.rpt_session.add(last)
def get_iso_reversal_orm(self): # Override
return IsoReversal
def run_reversal(self): # Override
super().run_reversal('bphtb reversal last date')
......
......@@ -24,6 +24,11 @@ class AlternativePerolehan(Base, PerolehanMixin):
__table_args__ = dict(schema='public')
def error(s):
print(s)
sys.exit()
class App(BaseApp):
field_invoice_id = 'bit_062'
field_ntb = 'bit_058'
......@@ -120,6 +125,8 @@ class App(BaseApp):
q = self.prod_session.query(Log).filter(Log.created >= tgl)
q = q.order_by(Log.id)
row = q.first()
if not row:
error('Kosong')
self.last_id = row.id - 1
func = self.__update_from_id
else:
......
......@@ -19,7 +19,6 @@ from opensipkd.bphtb.models.default import (
Perolehan,
Customer,
)
from opensipkd.bphtb.services.base import get_db_session
from iso8583_web.models.meta import Base as BaseConf
from opensipkd.iso8583.bjb.bphtb import Doc
from ..models import (
......@@ -84,9 +83,6 @@ class App(BaseApp):
Invoice.ppat_id == Customer.id,
Invoice.perolehan_id == Perolehan.id)
def get_db_session(self): # Override
return get_db_session()
def update_last_id(self, last, value):
last.nilai = str(value)
with transaction.manager:
......
......@@ -6,7 +6,8 @@ pad json reversal last date,1-1-2000 00:00:00,pad_reversal.tgl terakhir yang dip
pad2 payment last id,0,log_iso.id terakhir yang diproses
pad2 reversal last id,0,log_iso.id terakhir yang diproses
webr payment last id,0,log_iso.id terakhir yang diproses
webr reversal last id,0,log_iso.id terakhir yang diproses
webr2 payment last id,0,log_iso.id terakhir yang diproses
webr2 reversal last id,0,log_iso.id terakhir yang diproses
bphtb payment last id,0,bphtb.bphtb_payment.id terakhir yang diproses
bphtb reversal last date,1-1-2000 00:00:00,bphtb.bphtb_reversal.tgl terakhir yang diproses
bphtb json payment last id,0,bphtb.bphtb_payment.id terakhir yang diproses
......
......@@ -14,7 +14,6 @@ from opensipkd.iso8583.bjb.pad.models import (
Log,
PadLog,
)
from opensipkd.pad.services.base import get_db_session
from iso8583_web.models.meta import Base as BaseConf
from ..models import (
Base,
......@@ -51,9 +50,6 @@ class App(BaseApp):
CustomerUsaha.customer_id == Customer.id,
Usaha.id == Pajak.usaha_id,)
def get_db_session(self): # Override
return get_db_session()
def get_pay(self, iso_req):
q_pay = self.base_q_pay.filter(PadLog.id == iso_req.id)
return q_pay.first()
......
......@@ -106,10 +106,6 @@ class App(BaseApp):
kd_kantor=self.conf['kd_kantor'], kd_tp=self.conf['kd_tp'])
self.base_q_sppt = self.pbb_session.query(self.Sppt)
def get_db_session(self): # Override
factory = self.get_factory('db_url')
return factory()
def get_report(self, d): # Override
return super().get_report(d['bit_011'], d['bit_037'])
......
......@@ -10,10 +10,7 @@ from opensipkd.waktu import (
date_from_str,
)
from sismiop.models.default import PembayaranSppt as BasePsppt
from sismiop.services.base import (
get_db_session,
get_id,
)
from sismiop.services.base import get_id
from opensipkd.iso8583.bjb.scripts.common import get_module_object
from ..models import Pbb
from .common import (
......@@ -54,9 +51,6 @@ class App(BaseApp):
nip_rekam_byr_sppt=NIP_PENCATAT)
self.base_q_sppt = self.prod_session.query(self.Sppt)
def get_db_session(self): # Override
return get_db_session()
def get_sppt(self, psppt):
q = self.base_q_sppt.filter_by(
kd_propinsi=psppt.kd_propinsi,
......
......@@ -11,7 +11,6 @@ from opensipkd.waktu import (
)
from sismiop.models.default import PembayaranSppt as BasePsppt
from sismiop.services.base import (
get_db_session,
get_id,
)
from opensipkd.iso8583.bjb.scripts.common import get_module_object
......@@ -54,9 +53,6 @@ class App(BaseApp):
nip_rekam_byr_sppt=NIP_PENCATAT)
self.base_q_sppt = self.prod_session.query(self.Sppt)
def get_db_session(self): # Override
return get_db_session()
def get_sppt(self, psppt):
q = self.base_q_sppt.filter_by(
kd_propinsi=psppt.kd_propinsi,
......
import sys
from sqlalchemy.exc import ProgrammingError
import transaction
from opensipkd.waktu import dmyhms
from opensipkd.webr.models.default import (
Payment,
Invoice,
)
from opensipkd.webr.services.base import get_db_session
from opensipkd.iso8583.bjb.webr.structure import PAYMENT_CODE
from opensipkd.iso8583.bjb.webr.models import LogMixin
from opensipkd.iso8583.bjb.webr.models import (
LogMixin,
Log,
)
from iso8583_web.models.meta import Base as BaseConf
from ..models import (
Base,
......@@ -22,7 +25,7 @@ from .common import (
ERR_NOT_FOUND = 'Tgl {tgl_bayar} nomor bayar {invoice_id} tidak ada'
class Log(Base, LogMixin):
class AlternativeLog(Base, LogMixin):
__table_args__ = dict(schema='webr')
......@@ -36,14 +39,17 @@ class App(BaseApp):
super().__init__(argv)
if not self.pid:
return
self.base_q_iso_resp = self.prod_session.query(Log).filter_by(
self.base_q_iso_resp = self.prod_session.query(Log)
try:
self.base_q_iso_resp.first()
except ProgrammingError:
self.prod_session.rollback()
self.base_q_iso_resp = self.prod_session.query(AlternativeLog)
self.base_q_iso_resp = self.base_q_iso_resp.filter_by(
mti='0210', bit_003=PAYMENT_CODE)
self.base_q_pay = self.prod_session.query(Payment, Invoice).filter(
Payment.ar_invoice_id == Invoice.id)
def get_db_session(self): # Override
return get_db_session()
def get_pay(self, d):
q_pay = self.base_q_pay.filter(Invoice.kode == d['nomor_bayar'])
return q_pay.order_by(Payment.id.desc()).first()
......
import sys
from sqlalchemy.exc import ProgrammingError
import transaction
from opensipkd.waktu import dmyhms
from opensipkd.iso8583.bjb.webr.structure import PAYMENT_CODE
from opensipkd.iso8583.bjb.webr.models import (
LogMixin,
Log,
)
from iso8583_web.models.meta import Base as BaseConf
from ..models import (
Base,
Webr,
)
from .common import (
App2 as BaseApp,
init_db as base_init_db,
)
ERR_NOT_FOUND = 'Tgl {tgl_bayar} nomor bayar {invoice_id} tidak ada'
class AlternativeLog(Base, LogMixin):
__table_args__ = dict(schema='webr')
class App(BaseApp):
field_invoice_id = 'bit_061'
field_ntb = 'bit_048'
report_orm = Webr
def __init__(self, argv):
super().__init__(argv)
if not self.pid:
return
self.base_q_iso_resp = self.prod_session.query(Log)
self.log_orm = Log
try:
self.base_q_iso_resp.first()
except ProgrammingError:
self.prod_session.rollback()
self.base_q_iso_resp = self.prod_session.query(AlternativeLog)
self.log_orm = AlternativeLog
self.base_q_iso_resp = self.base_q_iso_resp.filter_by(
mti='0210', bit_003=PAYMENT_CODE)
def is_iso_resp_ok(self, iso_req):
q = self.base_q_iso_resp.filter_by(
bit_011=iso_req.bit_011, bit_048=iso_req.bit_048)
iso_resp = q.order_by(Log.id.desc()).first()
return iso_resp and iso_resp.bit_039 == '00'
def run_payment(self):
last = self.get_last_id('webr2 payment last id')
q_iso_req = self.prod_session.query(Log).filter_by(
mti='0210', bit_003=PAYMENT_CODE).filter(
Log.id > last.as_int())
for iso_req in q_iso_req.order_by(Log.id):
if self.get_report(iso_req):
continue
if not self.is_iso_resp_ok(iso_req):
continue
d = self.get_keys(iso_req)
tgl_bayar = iso_req.created.date()
s_tgl = dmyhms(iso_req.created)
self.log.info(
f'Tgl bayar {s_tgl}, Nomor bayar {d["nomor_bayar"]}, '
f'STAN {d["stan"]}, NTB {d["ntb"]}, Channel {d["channel"]}')
rpt = Webr(
stan=d['stan'], ntb=d['ntb'], tgl=tgl_bayar,
jam=iso_req.created.time(), payment_id=iso_req.id,
nomor_bayar=d['nomor_bayar'],
nama_wp=iso_req.bit_062_data['Nama Penyetor'],
pokok=iso_req.bit_004,
denda=0, jml_bayar=iso_req.bit_004,
channel_id=iso_req.bit_018.strip(),
channel_name=d['channel'])
last.nilai = str(iso_req.id)
with transaction.manager:
self.rpt_session.add(rpt)
self.rpt_session.add(last)
def get_log_orm(self): # Override
return self.log_orm
def run_reversal(self): # Override
super().run_reversal('webr2 reversal last id')
def main(argv=sys.argv[1:]):
app = App(argv)
if app.pid:
app.run()
def init_db(argv=sys.argv[1:]):
base_init_db(Base.metadata, BaseConf.metadata, argv)
......@@ -46,6 +46,7 @@ setup(
'pad_json_report = payment_report.scripts.pad_json:main',
'pad2_report = payment_report.scripts.pad2:main',
'webr_report = payment_report.scripts.webr:main',
'webr2_report = payment_report.scripts.webr2:main',
],
}
)
[main]
db_url = postgresql://user:pass@localhost/db
report_db_url = postgresql://user:pass@localhost/db
pid_file = /home/sugiana/tmp/webr-report.pid
log_file = /home/sugiana/log/webr-report.log
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!