pbb-iso.py 1.55 KB
import sys
import transaction
from opensipkd.iso8583.bjb.pbb.models import Log
from opensipkd.iso8583.bjb.pbb import Doc
from payment_report.scripts.pbb import App as BaseApp
from payment_report.scripts.common import (
    get_iso,
    get_keys,
    )


class App(BaseApp):
    def __run_payment(self):
        last = self.get_last_id('pbb payment last id')
        q_iso = self.__get_query_iso(last.as_int())
        found = False
        for row_pay, row_inq in q_iso.limit(1000):
            iso = get_iso(row_pay.iso_request, Doc, self.option.debug)
            stan = iso.getBit(11)
            ntb = iso.getBit(48)
            d = get_keys(iso)
            s = f"STAN {stan} NTB {ntb} Channel {d['channel']}"
            self.log.info(s)
            q = self.rpt_session.query(Log).filter_by(
                    bit_011=stan, bit_048=ntb)
            iso_log = q.first()
            if not iso_log:
                iso_values = iso.get_values()
                bits = dict(mti='0200')
                for bit in iso_values:
                    value = iso_values[bit]
                    field = 'bit_{}'.format(str(bit).zfill(3))
                    bits[field] = value
                iso_log = Log(**bits)
            iso_log.error = d['channel'],  # Numpang di field error
            last.nilai = str(row_inq.id)
            with transaction.manager:
                self.rpt_session.add(iso_log)
                self.rpt_session.add(last)
            found = True
        return found

    def run_reversal(self):  # Override
        pass


app = App(sys.argv[1:])
app.run()