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 0.3.1 3-3-2022
-------------- --------------
- Tambah PAD JSON (PT POS) - Tambah PAD JSON (PT POS)
......
...@@ -38,7 +38,7 @@ diperlukan user ``report``:: ...@@ -38,7 +38,7 @@ diperlukan user ``report``::
Lalu buat file konfigurasi bernama ``pad.ini``:: Lalu buat file konfigurasi bernama ``pad.ini``::
[main] [main]
module = opensipkd.iso8583.bjb.pad.default models = opensipkd.pad.models.default
db_url = postgresql://report:password@localhost:5432/simpad db_url = postgresql://report:password@localhost:5432/simpad
report_db_url = postgresql://report:password@localhost:5432/payment_report report_db_url = postgresql://report:password@localhost:5432/payment_report
pid_file = /home/sugiana/tmp/pad-report.pid pid_file = /home/sugiana/tmp/pad-report.pid
...@@ -74,7 +74,7 @@ Berikan hak akses yang diperlukan user ``report``:: ...@@ -74,7 +74,7 @@ Berikan hak akses yang diperlukan user ``report``::
Lalu buat file konfigurasi bernama ``bphtb.ini``:: Lalu buat file konfigurasi bernama ``bphtb.ini``::
[main] [main]
module = opensipkd.iso8583.bjb.bphtb.default models = opensipkd.bphtb.models.default
db_url = postgresql://report:password@localhost:5434/bphtb db_url = postgresql://report:password@localhost:5434/bphtb
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/bphtb-report.pid pid_file = /home/sugiana/tmp/bphtb-report.pid
...@@ -123,7 +123,6 @@ Berikan hak akses yang diperlukan user ``report``:: ...@@ -123,7 +123,6 @@ 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.pbb.default
models = sismiop.models.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
......
...@@ -15,7 +15,6 @@ from opensipkd.bphtb.models.default import ( ...@@ -15,7 +15,6 @@ from opensipkd.bphtb.models.default import (
Perolehan, Perolehan,
Customer, Customer,
) )
from opensipkd.bphtb.services.base import get_db_session
from iso8583_web.models.meta import Base as BaseConf from iso8583_web.models.meta import Base as BaseConf
from opensipkd.iso8583.bjb.bphtb import Doc from opensipkd.iso8583.bjb.bphtb import Doc
from ..models import ( from ..models import (
...@@ -59,7 +58,6 @@ class IsoReversal(Base): ...@@ -59,7 +58,6 @@ class IsoReversal(Base):
class App(BaseApp): class App(BaseApp):
iso_class = Doc iso_class = Doc
report_orm = Bphtb report_orm = Bphtb
iso_reversal_orm = IsoReversal
def __init__(self, argv): def __init__(self, argv):
super().__init__(argv) super().__init__(argv)
...@@ -70,9 +68,6 @@ class App(BaseApp): ...@@ -70,9 +68,6 @@ class App(BaseApp):
Invoice.ppat_id == Customer.id, Invoice.ppat_id == Customer.id,
Invoice.perolehan_id == Perolehan.id) Invoice.perolehan_id == Perolehan.id)
def get_db_session(self): # Override
return get_db_session()
def run_payment(self): # Override def run_payment(self): # Override
last = self.get_last_id('bphtb payment last id') last = self.get_last_id('bphtb payment last id')
q_iso = self.prod_session.query(IsoPayment, Payment).filter( q_iso = self.prod_session.query(IsoPayment, Payment).filter(
...@@ -111,6 +106,9 @@ class App(BaseApp): ...@@ -111,6 +106,9 @@ class App(BaseApp):
self.rpt_session.add(rpt) self.rpt_session.add(rpt)
self.rpt_session.add(last) self.rpt_session.add(last)
def get_iso_reversal_orm(self): # Override
return IsoReversal
def run_reversal(self): # Override def run_reversal(self): # Override
super().run_reversal('bphtb reversal last date') super().run_reversal('bphtb reversal last date')
......
...@@ -24,6 +24,11 @@ class AlternativePerolehan(Base, PerolehanMixin): ...@@ -24,6 +24,11 @@ class AlternativePerolehan(Base, PerolehanMixin):
__table_args__ = dict(schema='public') __table_args__ = dict(schema='public')
def error(s):
print(s)
sys.exit()
class App(BaseApp): class App(BaseApp):
field_invoice_id = 'bit_062' field_invoice_id = 'bit_062'
field_ntb = 'bit_058' field_ntb = 'bit_058'
...@@ -120,6 +125,8 @@ class App(BaseApp): ...@@ -120,6 +125,8 @@ class App(BaseApp):
q = self.prod_session.query(Log).filter(Log.created >= tgl) q = self.prod_session.query(Log).filter(Log.created >= tgl)
q = q.order_by(Log.id) q = q.order_by(Log.id)
row = q.first() row = q.first()
if not row:
error('Kosong')
self.last_id = row.id - 1 self.last_id = row.id - 1
func = self.__update_from_id func = self.__update_from_id
else: else:
......
...@@ -19,7 +19,6 @@ from opensipkd.bphtb.models.default import ( ...@@ -19,7 +19,6 @@ from opensipkd.bphtb.models.default import (
Perolehan, Perolehan,
Customer, Customer,
) )
from opensipkd.bphtb.services.base import get_db_session
from iso8583_web.models.meta import Base as BaseConf from iso8583_web.models.meta import Base as BaseConf
from opensipkd.iso8583.bjb.bphtb import Doc from opensipkd.iso8583.bjb.bphtb import Doc
from ..models import ( from ..models import (
...@@ -84,9 +83,6 @@ class App(BaseApp): ...@@ -84,9 +83,6 @@ class App(BaseApp):
Invoice.ppat_id == Customer.id, Invoice.ppat_id == Customer.id,
Invoice.perolehan_id == Perolehan.id) Invoice.perolehan_id == Perolehan.id)
def get_db_session(self): # Override
return get_db_session()
def update_last_id(self, last, value): def update_last_id(self, last, value):
last.nilai = str(value) last.nilai = str(value)
with transaction.manager: with transaction.manager:
......
...@@ -6,7 +6,8 @@ pad json reversal last date,1-1-2000 00:00:00,pad_reversal.tgl terakhir yang dip ...@@ -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 payment last id,0,log_iso.id terakhir yang diproses
pad2 reversal 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 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 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 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 bphtb json payment last id,0,bphtb.bphtb_payment.id terakhir yang diproses
......
...@@ -14,7 +14,6 @@ from opensipkd.iso8583.bjb.pad.models import ( ...@@ -14,7 +14,6 @@ from opensipkd.iso8583.bjb.pad.models import (
Log, Log,
PadLog, PadLog,
) )
from opensipkd.pad.services.base import get_db_session
from iso8583_web.models.meta import Base as BaseConf from iso8583_web.models.meta import Base as BaseConf
from ..models import ( from ..models import (
Base, Base,
...@@ -51,9 +50,6 @@ class App(BaseApp): ...@@ -51,9 +50,6 @@ class App(BaseApp):
CustomerUsaha.customer_id == Customer.id, CustomerUsaha.customer_id == Customer.id,
Usaha.id == Pajak.usaha_id,) Usaha.id == Pajak.usaha_id,)
def get_db_session(self): # Override
return get_db_session()
def get_pay(self, iso_req): def get_pay(self, iso_req):
q_pay = self.base_q_pay.filter(PadLog.id == iso_req.id) q_pay = self.base_q_pay.filter(PadLog.id == iso_req.id)
return q_pay.first() return q_pay.first()
......
...@@ -106,10 +106,6 @@ class App(BaseApp): ...@@ -106,10 +106,6 @@ class App(BaseApp):
kd_kantor=self.conf['kd_kantor'], kd_tp=self.conf['kd_tp']) kd_kantor=self.conf['kd_kantor'], kd_tp=self.conf['kd_tp'])
self.base_q_sppt = self.pbb_session.query(self.Sppt) 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 def get_report(self, d): # Override
return super().get_report(d['bit_011'], d['bit_037']) return super().get_report(d['bit_011'], d['bit_037'])
......
...@@ -10,10 +10,7 @@ from opensipkd.waktu import ( ...@@ -10,10 +10,7 @@ from opensipkd.waktu import (
date_from_str, date_from_str,
) )
from sismiop.models.default import PembayaranSppt as BasePsppt from sismiop.models.default import PembayaranSppt as BasePsppt
from sismiop.services.base import ( from sismiop.services.base import get_id
get_db_session,
get_id,
)
from opensipkd.iso8583.bjb.scripts.common import get_module_object from opensipkd.iso8583.bjb.scripts.common import get_module_object
from ..models import Pbb from ..models import Pbb
from .common import ( from .common import (
...@@ -54,9 +51,6 @@ class App(BaseApp): ...@@ -54,9 +51,6 @@ class App(BaseApp):
nip_rekam_byr_sppt=NIP_PENCATAT) nip_rekam_byr_sppt=NIP_PENCATAT)
self.base_q_sppt = self.prod_session.query(self.Sppt) 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): def get_sppt(self, psppt):
q = self.base_q_sppt.filter_by( q = self.base_q_sppt.filter_by(
kd_propinsi=psppt.kd_propinsi, kd_propinsi=psppt.kd_propinsi,
......
...@@ -11,7 +11,6 @@ from opensipkd.waktu import ( ...@@ -11,7 +11,6 @@ from opensipkd.waktu import (
) )
from sismiop.models.default import PembayaranSppt as BasePsppt from sismiop.models.default import PembayaranSppt as BasePsppt
from sismiop.services.base import ( from sismiop.services.base import (
get_db_session,
get_id, get_id,
) )
from opensipkd.iso8583.bjb.scripts.common import get_module_object from opensipkd.iso8583.bjb.scripts.common import get_module_object
...@@ -54,9 +53,6 @@ class App(BaseApp): ...@@ -54,9 +53,6 @@ class App(BaseApp):
nip_rekam_byr_sppt=NIP_PENCATAT) nip_rekam_byr_sppt=NIP_PENCATAT)
self.base_q_sppt = self.prod_session.query(self.Sppt) 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): def get_sppt(self, psppt):
q = self.base_q_sppt.filter_by( q = self.base_q_sppt.filter_by(
kd_propinsi=psppt.kd_propinsi, kd_propinsi=psppt.kd_propinsi,
......
import sys import sys
from sqlalchemy.exc import ProgrammingError
import transaction import transaction
from opensipkd.waktu import dmyhms from opensipkd.waktu import dmyhms
from opensipkd.webr.models.default import ( from opensipkd.webr.models.default import (
Payment, Payment,
Invoice, Invoice,
) )
from opensipkd.webr.services.base import get_db_session
from opensipkd.iso8583.bjb.webr.structure import PAYMENT_CODE 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 iso8583_web.models.meta import Base as BaseConf
from ..models import ( from ..models import (
Base, Base,
...@@ -22,7 +25,7 @@ from .common import ( ...@@ -22,7 +25,7 @@ from .common import (
ERR_NOT_FOUND = 'Tgl {tgl_bayar} nomor bayar {invoice_id} tidak ada' 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') __table_args__ = dict(schema='webr')
...@@ -36,14 +39,17 @@ class App(BaseApp): ...@@ -36,14 +39,17 @@ class App(BaseApp):
super().__init__(argv) super().__init__(argv)
if not self.pid: if not self.pid:
return 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) mti='0210', bit_003=PAYMENT_CODE)
self.base_q_pay = self.prod_session.query(Payment, Invoice).filter( self.base_q_pay = self.prod_session.query(Payment, Invoice).filter(
Payment.ar_invoice_id == Invoice.id) Payment.ar_invoice_id == Invoice.id)
def get_db_session(self): # Override
return get_db_session()
def get_pay(self, d): def get_pay(self, d):
q_pay = self.base_q_pay.filter(Invoice.kode == d['nomor_bayar']) q_pay = self.base_q_pay.filter(Invoice.kode == d['nomor_bayar'])
return q_pay.order_by(Payment.id.desc()).first() 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( ...@@ -46,6 +46,7 @@ setup(
'pad_json_report = payment_report.scripts.pad_json:main', 'pad_json_report = payment_report.scripts.pad_json:main',
'pad2_report = payment_report.scripts.pad2:main', 'pad2_report = payment_report.scripts.pad2:main',
'webr_report = payment_report.scripts.webr: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!