Commit c1e99889 by Owo Sugiana

Tambah baris models pada file konfigurasi sebagai pengganti module

1 parent 1f6f5041
0.3 28-2-2022
-------------
- Tambah baris models pada file konfigurasi sebagai pengganti module
- Perbaikan pada BPHTB terkait tabel bphtb_perolehan yang berbeda schema
- Tambah BPHTB JSON (PT POS)
- Tambah PBB JSON (PT POS)
0.2.1 23-12-2021 0.2.1 23-12-2021
---------------- ----------------
- Tambah WEBR - Tambah WEBR
......
[main]
models = opensipkd.bphtb.models.default
db_url = postgresql://user:pass@localhost/db
report_db_url = postgresql://user:pass@localhost/db
pid_file = /home/sugiana/tmp/bphtb-report.pid
log_file = /home/sugiana/log/bphtb-report.log
[main]
models = opensipkd.pad.models.default
db_url = postgresql://user:pass@localhost/db
report_db_url = postgresql://user:pass@localhost/db
pid_file = /home/sugiana/tmp/pad-report.pid
log_file = /home/sugiana/log/pad-report.log
...@@ -51,6 +51,8 @@ class Pad(Base, Common): ...@@ -51,6 +51,8 @@ class Pad(Base, Common):
denda = Column(Float, nullable=False) denda = Column(Float, nullable=False)
# pad.pad_sspd.jml_bayar # pad.pad_sspd.jml_bayar
jml_bayar = Column(Float, nullable=False) jml_bayar = Column(Float, nullable=False)
# Bit 32
bank_id = Column(Integer)
# Bit 18 # Bit 18
channel_id = Column(String(4), nullable=False) channel_id = Column(String(4), nullable=False)
# Bit 41 / 42 / 43 # Bit 41 / 42 / 43
......
...@@ -50,7 +50,7 @@ class IsoPayment(Base): ...@@ -50,7 +50,7 @@ class IsoPayment(Base):
class IsoReversal(Base): class IsoReversal(Base):
__tablename__ = 'bphtb_reversal' __tablename__ = 'bphtb_reversal'
__table_args__ = dict(schema='bphtb') __table_args__ = dict(schema='public')
id = Column(Integer, ForeignKey(IsoPayment.id), primary_key=True) id = Column(Integer, ForeignKey(IsoPayment.id), primary_key=True)
tgl = Column(DateTime(timezone=True), nullable=False) tgl = Column(DateTime(timezone=True), nullable=False)
iso_request = Column(String(1024), nullable=False) iso_request = Column(String(1024), nullable=False)
...@@ -79,6 +79,11 @@ class App(BaseApp): ...@@ -79,6 +79,11 @@ class App(BaseApp):
IsoPayment.id == Payment.id, IsoPayment.id == Payment.id,
IsoPayment.id > last.as_int()) IsoPayment.id > last.as_int())
for row_iso, row_pay in q_iso.order_by(IsoPayment.id): for row_iso, row_pay in q_iso.order_by(IsoPayment.id):
if row_iso.iso_request[0] == '{':
last.nilai = str(row_iso.id)
with transaction.manager:
self.rpt_session.add(last)
continue
iso = get_iso(row_iso.iso_request, Doc, self.option.debug) iso = get_iso(row_iso.iso_request, Doc, self.option.debug)
if self.get_report(iso): if self.get_report(iso):
continue continue
...@@ -102,7 +107,6 @@ class App(BaseApp): ...@@ -102,7 +107,6 @@ class App(BaseApp):
channel_id=iso.get_channel().strip(), channel_id=iso.get_channel().strip(),
channel_nama=d['channel']) channel_nama=d['channel'])
last.nilai = str(row_iso.id) last.nilai = str(row_iso.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)
......
import sys import sys
from sqlalchemy.exc import ProgrammingError
import transaction import transaction
from opensipkd.waktu import dmyhms from opensipkd.waktu import (
dmyhms,
date_from_str,
)
from opensipkd.bphtb.models.perolehan import PerolehanMixin
from opensipkd.bphtb.models.default import Perolehan from opensipkd.bphtb.models.default import Perolehan
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.structure import PAYMENT_CODE from opensipkd.iso8583.bjb.bphtb.structure import PAYMENT_CODE
from opensipkd.iso8583.bjb.bphtb.models import Log from opensipkd.iso8583.bjb.bphtb.models import Log
...@@ -16,59 +20,114 @@ from .common import ( ...@@ -16,59 +20,114 @@ from .common import (
) )
class AlternativePerolehan(Base, PerolehanMixin):
__table_args__ = dict(schema='public')
class App(BaseApp): class App(BaseApp):
field_invoice_id = 'bit_062' field_invoice_id = 'bit_062'
field_ntb = 'bit_058' field_ntb = 'bit_058'
report_orm = Bphtb report_orm = Bphtb
log_orm = Log
def __init__(self, argv): def __init__(self, argv):
super().__init__(argv) super().__init__(argv)
if not self.pid: if not self.pid:
return return
self.base_q_perolehan = self.prod_session.query(Perolehan) self.base_q_perolehan = self.prod_session.query(Perolehan)
with transaction.manager:
try:
self.base_q_perolehan.first()
except ProgrammingError:
self.prod_session.rollback()
self.base_q_perolehan = self.prod_session.query(
AlternativePerolehan)
def get_db_session(self): # Override def get_log_orm(self): # Override
return get_db_session() return Log
def run_payment(self): # Override def __create_data(self, row_iso):
tgl_bayar = row_iso.created.date()
d = self.get_keys(row_iso)
s_tgl = dmyhms(row_iso.created)
self.log.info(
f'Tgl bayar {s_tgl}, Nomor bayar {d["nomor_bayar"]}, '
f'STAN {d["stan"]}, NTB {d["ntb"]}, Channel {d["channel"]}')
p = eval(row_iso.bit_047_data)
q = self.base_q_perolehan.filter_by(id=p['Jenis Perolehan Hak'])
perolehan = q.first()
return dict(
stan=d['stan'], ntb=d['ntb'], tgl=tgl_bayar,
jam=row_iso.created.time(),
invoice_id=row_iso.bit_062.strip(),
nop=row_iso.bit_061.strip(),
wp_nama=p['Nama Wajib Pajak'],
wp_alamat=p['Alamat WP'],
op_alamat=p['Alamat OP'],
npop=p['NPOP'],
bumi_luas=p['Luas Tanah'],
bng_luas=p['Luas Bangunan'],
nilai_bphtb=float(row_iso.bit_004),
jenis_perolehan=perolehan.nama,
ppat=p['Nama Notaris'],
channel_id=row_iso.bit_018.strip(),
channel_nama=d['channel'])
def __get_query_iso(self, last_id):
return self.prod_session.query(Log).filter_by(
mti='0210', bit_003=PAYMENT_CODE, bit_039='00').filter(
Log.id > last_id)
def __run_payment(self):
last = self.get_last_id('bphtb2 payment last id') last = self.get_last_id('bphtb2 payment last id')
q_iso = self.prod_session.query(Log).filter_by( q_iso = self.__get_query_iso(last.as_int())
mti='0210', bit_003=PAYMENT_CODE, bit_039='00').filter( found = False
Log.id > last.as_int()) for row_iso in q_iso.order_by(Log.id).limit(1000):
for row_iso in q_iso.order_by(Log.id):
if self.get_report(row_iso): if self.get_report(row_iso):
last.nilai = str(row_iso.id)
with transaction.manager:
self.rpt_session.add(last)
continue continue
tgl_bayar = row_iso.created.date() data = self.__create_data(row_iso)
d = self.get_keys(row_iso) rpt = Bphtb(**data)
s_tgl = dmyhms(row_iso.created)
self.log.info(
f'Tgl bayar {s_tgl}, Nomor bayar {d["nomor_bayar"]}, '
f'STAN {d["stan"]}, NTB {d["ntb"]}, Channel {d["channel"]}')
p = row_iso.bit_047_data
q = self.base_q_perolehan.filter_by(id=p['Jenis Perolehan Hak'])
perolehan = q.first()
rpt = Bphtb(
stan=d['stan'], ntb=d['ntb'], tgl=tgl_bayar,
jam=row_iso.created.time(),
invoice_id=row_iso.bit_062.strip(),
nop=row_iso.bit_061.strip(),
wp_nama=p['Nama Wajib Pajak'],
wp_alamat=p['Alamat WP'],
op_alamat=p['Alamat OP'],
npop=p['NPOP'],
bumi_luas=p['Luas Tanah'],
bng_luas=p['Luas Bangunan'],
nilai_bphtb=float(row_iso.bit_004),
jenis_perolehan=perolehan.nama,
ppat=p['Nama Notaris'],
channel_id=row_iso.bit_018.strip(),
channel_nama=d['channel'])
last.nilai = str(row_iso.id) last.nilai = str(row_iso.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)
found = True
return found
def __update_from_id(self):
q_iso = self.__get_query_iso(self.last_id)
found = False
for row_iso in q_iso.order_by(Log.id).limit(1000):
rpt = self.get_report(row_iso)
if not rpt:
rpt = Bphtb()
data = self.__create_data(row_iso)
rpt.from_dict(data)
with transaction.manager:
self.rpt_session.add(rpt)
self.last_id = row_iso.id
found = True
return found
def run_payment(self): # Override
if self.option.update_from_id:
self.last_id = self.option.update_from_id
func = self.__update_from_id
elif self.option.update_from_date:
tgl = date_from_str(self.option.update_from_date)
q = self.prod_session.query(Log).filter(Log.created >= tgl)
q = q.order_by(Log.id)
row = q.first()
self.last_id = row.id - 1
func = self.__update_from_id
else:
func = self.__run_payment
while True:
found = func()
if not found:
break
def run_reversal(self): # Override def run_reversal(self): # Override
super().run_reversal('bphtb2 reversal last id') super().run_reversal('bphtb2 reversal last id')
......
import sys
from sqlalchemy import (
Column,
Integer,
DateTime,
String,
Date,
ForeignKey,
)
import transaction
import datetime
from opensipkd.waktu import (
dmyhms,
date_from_str,
)
from opensipkd.bphtb.models.default import (
Payment,
Invoice,
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 (
Base,
Bphtb,
)
from .common import (
BaseApp,
init_db as base_init_db,
BANK_NAMES,
)
def get_keys(iso):
return dict(
nomor_bayar=iso['no_tagihan'],
ntb=iso['transno'],
nama_bank=BANK_NAMES[iso['bankid']])
def get_filter(q):
return q.filter(IsoPayment.iso_request.like('{%'))
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='public')
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
iso_reversal_orm = IsoReversal
def __init__(self, argv):
super().__init__(argv)
if not self.pid:
return
self.base_q_inv = self.prod_session.query(
Invoice, Customer, Perolehan).filter(
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:
self.rpt_session.add(last)
def __warning_nol(self, s_tgl, d, row_pay):
msg = f'Tgl bayar {s_tgl}, Nomor bayar {d["nomor_bayar"]}, '\
f'NTB {d["ntb"]}, Channel {d["nama_bank"]}, '\
f'nilai Rp {row_pay.bayar} tidak disimpan'
self.log.warning(msg)
def __log_progress(self, s_tgl, d):
self.log.info(
f'Tgl bayar {s_tgl}, Nomor bayar {d["nomor_bayar"]}, '
f'NTB {d["ntb"]}, Channel {d["nama_bank"]}')
def __get_query_iso(self, last_id):
q_iso = self.prod_session.query(IsoPayment, Payment).filter(
IsoPayment.id == Payment.id,
IsoPayment.id > last_id)
q_iso = get_filter(q_iso)
return q_iso.order_by(IsoPayment.id)
def __create_data(self, row_iso, row_pay, iso, d):
q_inv = self.base_q_inv.filter(Invoice.id == row_pay.sspd_id)
inv, ppat, perolehan = q_inv.first()
return dict(
stan=row_iso.id, ntb=d['ntb'], tgl=row_iso.tgl,
jam=row_iso.tgl.time(), invoice_id=d['nomor_bayar'],
nop=row_pay.nop, wp_nama=row_pay.wp_nama,
wp_alamat=row_pay.wp_alamat, op_alamat=inv.op_alamat,
npop=row_pay.npop, bumi_luas=row_pay.bumi_luas,
bng_luas=row_pay.bng_luas, nilai_bphtb=row_pay.bayar,
jenis_perolehan=perolehan.nama, ppat=ppat.nama,
channel_id=int(iso['bankid']), channel_nama=d['nama_bank'])
def __run_payment(self):
last = self.get_last_id('bphtb json payment last id')
q_iso = self.__get_query_iso(last.as_int())
for row_iso, row_pay in q_iso:
iso = eval(row_iso.iso_request)
d = get_keys(iso)
if self.get_report(d['nomor_bayar'], d['ntb']):
continue
s_tgl = dmyhms(row_iso.tgl)
if not row_pay.bayar:
self.__warning_nol(s_tgl, d, row_pay)
self.update_last_id(last, str(row_iso.id))
continue
self.__log_progress(s_tgl, d)
data = self._create_data(row_iso, row_pay, iso, d)
rpt = Bphtb(**data)
last.nilai = str(row_iso.id)
with transaction.manager:
self.rpt_session.add(rpt)
self.rpt_session.add(last)
def __update_from_id(self):
q_iso = self.__get_query_iso(self.last_id)
found = False
for row_iso, row_pay in q_iso.limit(1000):
iso = eval(row_iso.iso_request)
d = get_keys(iso)
s_tgl = dmyhms(row_iso.tgl)
if not row_pay.bayar:
self.__warning_nol(s_tgl, d, row_pay)
continue
self.__log_progress(s_tgl, d)
data = self.__create_data(row_iso, row_pay, iso, d)
rpt = self.get_report(d['nomor_bayar'], d['ntb'])
if not rpt:
rpt = Bphtb()
rpt.from_dict(data)
with transaction.manager:
self.rpt_session.add(rpt)
found = True
self.last_id = row_iso.id
return found
def run_payment(self): # Override
if self.option.update_from_id:
self.last_id = self.option.update_from_id
func = self.__update_from_id
elif self.option.update_from_date:
tgl = date_from_str(self.option.update_from_date)
q = self.prod_session.query(IsoPayment).filter(
IsoPayment.tgl >= tgl).order_by(
IsoPayment.id)
q = get_filter(q)
row = q.first()
self.last_id = row.id - 1
func = self.__update_from_id
else:
func = self.__run_payment
while True:
found = func()
if not found:
break
def run_reversal(self): # Override
last = self.get_last_id('bphtb json reversal last date')
q = self.prod_session.query(self.iso_reversal_orm).filter(
self.iso_reversal_orm.iso_request.like('{%'),
self.iso_reversal_orm.tgl > last.as_datetime())
for row in q.order_by(self.iso_reversal_orm.tgl):
iso = eval(row.iso_request)
invoice_id = iso['bit_061']
ntb = iso['bit_037']
rpt = self.get_report(invoice_id, ntb)
if not rpt or rpt.tgl_batal:
continue
nama_bank = BANK_NAMES[iso['bit_032']]
rpt.tgl_batal = row.tgl
last.nilai = s_tgl = dmyhms(row.tgl)
self.log.info(
f'Tgl batal {s_tgl}, Nomor bayar {invoice_id}, '
f'NTB {ntb}, Channel {nama_bank}')
with transaction.manager:
self.rpt_session.add(rpt)
self.rpt_session.add(last)
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)
...@@ -43,7 +43,13 @@ BIT_PROFILE_NAMES = { ...@@ -43,7 +43,13 @@ BIT_PROFILE_NAMES = {
'TOKOPEDI': 'TOKOPEDIA', 'TOKOPEDI': 'TOKOPEDIA',
'BUKALAPA': 'BUKALAPAK', 'BUKALAPA': 'BUKALAPAK',
'MASAGO': 'MASAGO', 'MASAGO': 'MASAGO',
'BAYARIN': 'BAYARIN'} 'BAYARIN': 'BAYARIN',
'TRAVELOK': 'TRAVELOKA',
'SHOPEE': 'SHOPEE',
'OVO': 'OVO',
'BLIBLI': 'BLIBLI'}
BANK_NAMES = {'700': 'PT POS'}
my_registry = dict() my_registry = dict()
...@@ -90,7 +96,9 @@ def get_iso(raw, iso_class, debug=False): ...@@ -90,7 +96,9 @@ def get_iso(raw, iso_class, debug=False):
return iso return iso
def get_channel_name(bit_018, bit_041, bit_042, bit_043): def get_channel_name(bit_018, bit_032, bit_041, bit_042, bit_043):
if bit_032 and bit_032 in BANK_NAMES:
return BANK_NAMES[bit_032]
if not bit_018: if not bit_018:
return 'LAINNYA' return 'LAINNYA'
bit_018 = bit_018.strip() bit_018 = bit_018.strip()
...@@ -120,14 +128,22 @@ def get_channel_info_by_iso(iso): ...@@ -120,14 +128,22 @@ def get_channel_info_by_iso(iso):
continue continue
if lengkap: if lengkap:
d['channel'] = get_channel_name( d['channel'] = get_channel_name(
iso.getBit(18), iso.getBit(41), iso.getBit(42), iso.getBit(43)) iso.getBit(18), iso.getBit(32), iso.getBit(41), iso.getBit(42),
iso.getBit(43))
else: else:
d['channel'] = 'LAINNYA' d['channel'] = 'LAINNYA'
return d return d
def get_channel_name_by_row(row): def get_channel_name_by_row(row):
return get_channel_name(row.bit_018, row.bit_041, row.bit_042, row.bit_043) return get_channel_name(
row.bit_018, row.bit_032, row.bit_041, row.bit_042, row.bit_043)
def get_channel_name_by_dict(d):
return get_channel_name(
d['bit_018'], d['bit_032'], d.get('bit_041'), d.get('bit_042'),
d.get('bit_043'))
def get_keys(iso): def get_keys(iso):
...@@ -223,21 +239,20 @@ class BaseApp: ...@@ -223,21 +239,20 @@ class BaseApp:
if not self.pid: if not self.pid:
return return
self.log = create_log(self.conf['log_file']) self.log = create_log(self.conf['log_file'])
module_name = self.conf['module'] if 'models' in self.conf:
self.module = get_module_object(module_name) self.models = get_module_object(self.conf['models'])
module_conf = dict(self.conf) module_conf = dict(self.conf)
self.module.init(module_conf) factory = self.get_factory('db_url')
self.prod_session = self.get_db_session() self.prod_session = factory()
self.prod_session.bind.echo = self.option.debug_sql factory = self.get_factory('report_db_url')
engine = create_engine(
self.conf['report_db_url'], echo=self.option.debug_sql)
factory = sessionmaker(bind=engine)
self.rpt_session = factory() self.rpt_session = factory()
register(self.rpt_session) register(self.rpt_session)
self.base_q_report = self.rpt_session.query(self.report_orm) self.base_q_report = self.rpt_session.query(self.report_orm)
def get_db_session(self): # Override, please def get_factory(self, name):
pass db_url = self.conf[name]
engine = create_engine(db_url, echo=self.option.debug_sql)
return sessionmaker(bind=engine)
def get_last_id(self, nama): def get_last_id(self, nama):
q = self.rpt_session.query(Conf).filter_by(nama=nama) q = self.rpt_session.query(Conf).filter_by(nama=nama)
...@@ -263,20 +278,28 @@ class BaseApp: ...@@ -263,20 +278,28 @@ class BaseApp:
# Tanpa tabel log_iso # Tanpa tabel log_iso
class App(BaseApp): class App(BaseApp):
iso_class = None # Override, please
iso_reversal_orm = None # Override, please
def get_report(self, iso): # Override def get_report(self, iso): # Override
d = get_keys(iso) d = get_keys(iso)
return super().get_report(d['stan'], d['ntb']) return super().get_report(d['stan'], d['ntb'])
def get_iso_reversal_orm(self): # Override, please
return
def get_doc_for_reversal(row): # Override, please
return
def run_reversal(self, conf_name): # Override def run_reversal(self, conf_name): # Override
last = self.get_last_id(conf_name) last = self.get_last_id(conf_name)
q = self.prod_session.query(self.iso_reversal_orm).filter( orm = self.get_iso_reversal_orm()
self.iso_reversal_orm.tgl > last.as_datetime()) q = self.prod_session.query(orm).filter(orm.tgl > last.as_datetime())
iso_class = self.module.Doc() for row in q.order_by(orm.tgl):
for row in q.order_by(self.iso_reversal_orm.tgl): if row.iso_request[0] == '{':
iso = get_iso(row.iso_request, self.iso_class, self.option.debug) last.nilai = dmyhms(row.tgl)
with transaction.manager:
self.rpt_session.add(last)
continue
Doc = self.get_doc_for_reversal(row)
iso = get_iso(row.iso_request, Doc, self.option.debug)
rpt = self.get_report(iso) rpt = self.get_report(iso)
if not rpt or rpt.tgl_batal: if not rpt or rpt.tgl_batal:
continue continue
...@@ -294,10 +317,12 @@ class App(BaseApp): ...@@ -294,10 +317,12 @@ class App(BaseApp):
# Dengan tabel log_iso # Dengan tabel log_iso
class App2(BaseApp): class App2(BaseApp):
log_orm = None # Override, please
field_invoice_id = None # Override, please field_invoice_id = None # Override, please
field_ntb = None # Override, please field_ntb = None # Override, please
def get_log_orm(self): # Override, please
return
def get_stan(self, row): def get_stan(self, row):
return row.bit_011.strip() return row.bit_011.strip()
...@@ -323,10 +348,11 @@ class App2(BaseApp): ...@@ -323,10 +348,11 @@ class App2(BaseApp):
def run_reversal(self, conf_name): # Override def run_reversal(self, conf_name): # Override
last = self.get_last_id(conf_name) last = self.get_last_id(conf_name)
q = self.prod_session.query(self.log_orm).filter_by( orm = self.get_log_orm()
q = self.prod_session.query(orm).filter_by(
mti='0410', bit_039='00').filter( mti='0410', bit_039='00').filter(
self.log_orm.id > last.id) orm.id > last.id)
for row in q.order_by(self.log_orm.id): for row in q.order_by(orm.id):
rpt = self.get_report(row) rpt = self.get_report(row)
if not rpt or rpt.tgl_batal: if not rpt or rpt.tgl_batal:
continue continue
......
...@@ -7,6 +7,8 @@ webr payment last id,0,log_iso.id terakhir yang diproses ...@@ -7,6 +7,8 @@ webr payment last id,0,log_iso.id terakhir yang diproses
webr reversal last id,0,log_iso.id terakhir yang diproses webr 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 reversal last date,1-1-2000 00:00:00,bphtb.bphtb_reversal.tgl terakhir yang diproses
bphtb2 payment last id,0,log_iso.id terakhir yang diproses bphtb2 payment last id,0,log_iso.id terakhir yang diproses
bphtb2 reversal last id,0,log_iso.id terakhir yang diproses bphtb2 reversal last id,0,log_iso.id terakhir yang diproses
pbb payment last id,0,inquiry.id terakhir yang diproses pbb payment last id,0,inquiry.id terakhir yang diproses
......
import sys import sys
from datetime import timedelta from datetime import timedelta
import transaction import transaction
from opensipkd.waktu import dmyhms from opensipkd.waktu import (
dmyhms,
date_from_str,
)
from opensipkd.pad.models.default import ( from opensipkd.pad.models.default import (
IsoPayment, IsoPayment,
IsoReversal, IsoReversal,
Payment,
Invoice,
Pajak,
CustomerUsaha,
Customer,
Usaha,
) )
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 opensipkd.iso8583.bjb.pad import Doc from opensipkd.iso8583.bjb.pad.doc import Doc as BjbDoc
from opensipkd.iso8583.multi.doc import Doc as MultiDoc
from ..models import ( from ..models import (
Base, Base,
Pad, Pad,
...@@ -26,19 +23,27 @@ from .common import ( ...@@ -26,19 +23,27 @@ from .common import (
init_db as base_init_db, init_db as base_init_db,
) )
BankHandlers = {
8: MultiDoc,
14: MultiDoc,
110: BjbDoc}
ERR_NOT_FOUND = 'Tgl {tgl_bayar} pad.pad_sspd.spt_id {invoice_id} tidak ada' ERR_NOT_FOUND = 'Tgl {tgl_bayar} pad.pad_sspd.spt_id {invoice_id} tidak ada'
class App(BaseApp): class App(BaseApp):
iso_class = Doc
report_orm = Pad report_orm = Pad
iso_reversal_orm = IsoReversal
def __init__(self, argv): def __init__(self, argv):
super().__init__(argv) super().__init__(argv)
if not self.pid: if not self.pid:
return return
Usaha = self.models.Usaha
Pajak = self.models.Pajak
Customer = self.models.Customer
CustomerUsaha = self.models.CustomerUsaha
Invoice = self.models.Invoice
Payment = self.models.Payment
self.base_q_pay = self.prod_session.query(Payment) self.base_q_pay = self.prod_session.query(Payment)
self.base_q_inv = self.prod_session.query( self.base_q_inv = self.prod_session.query(
Invoice, Pajak, Customer, Usaha) Invoice, Pajak, Customer, Usaha)
...@@ -47,23 +52,45 @@ class App(BaseApp): ...@@ -47,23 +52,45 @@ class App(BaseApp):
Invoice.customer_usaha_id == CustomerUsaha.id, Invoice.customer_usaha_id == CustomerUsaha.id,
CustomerUsaha.customer_id == Customer.id, CustomerUsaha.customer_id == Customer.id,
Usaha.id == Pajak.usaha_id,) Usaha.id == Pajak.usaha_id,)
self.base_q_iso = self.prod_session.query(IsoPayment)
def get_db_session(self): # Override
return get_db_session()
def get_pay(self, row): def get_pay(self, row):
tgl_bayar = row.tgl.date() tgl_bayar = row.tgl.date()
Payment = self.models.Payment
q_pay = self.base_q_pay.filter_by(spt_id=row.invoice_id).filter( q_pay = self.base_q_pay.filter_by(spt_id=row.invoice_id).filter(
Payment.create_date >= tgl_bayar, Payment.create_date >= tgl_bayar,
Payment.create_date < tgl_bayar + timedelta(1)) Payment.create_date < tgl_bayar + timedelta(1))
q_pay = q_pay.order_by(Payment.id.desc()) q_pay = q_pay.order_by(Payment.id.desc())
return q_pay.first() return q_pay.first()
def run_payment(self): def __get_query_iso(self, last_id):
q_iso = self.base_q_iso.filter(IsoPayment.id > last_id)
return q_iso.order_by(IsoPayment.id)
def __create_data(self, row, pay, iso, d, tgl_bayar):
Invoice = self.models.Invoice
q_inv = self.base_q_inv.filter(Invoice.id == pay.spt_id)
inv, pajak, cust, usaha = q_inv.first()
return dict(
stan=d['stan'], ntb=d['ntb'], tgl=tgl_bayar,
jam=row.tgl.time(), sspd_id=pay.id,
nomor_bayar=iso.get_invoice_id().strip(),
jenis_pajak=usaha.usahanm.strip(),
masa_pajak=pajak.masapajak, npwpd=cust.npwpd,
nama_wp=cust.customernm, pokok=pay.jml_bayar-pay.denda,
denda=pay.denda, jml_bayar=pay.jml_bayar,
channel_id=iso.get_channel().strip(),
channel_name=d['channel'], bank_id=iso.get_bank_id())
def __log_progress(self, s_tgl, d):
self.log.info(f'Tgl bayar {s_tgl}, {d}')
def __run_payment(self):
last = self.get_last_id('pad payment last id') last = self.get_last_id('pad payment last id')
q_iso = self.prod_session.query(IsoPayment).filter( q_iso = self.__get_query_iso(last.as_int())
IsoPayment.id > last.as_int()) found = False
for row in q_iso.order_by(IsoPayment.id): for row in q_iso.order_by(IsoPayment.id).limit(1000):
Doc = BankHandlers[row.bank_id]
iso = get_iso(row.iso_request, Doc, self.option.debug) iso = get_iso(row.iso_request, Doc, self.option.debug)
if self.get_report(iso): if self.get_report(iso):
continue continue
...@@ -74,28 +101,71 @@ class App(BaseApp): ...@@ -74,28 +101,71 @@ class App(BaseApp):
tgl_bayar=tgl_bayar, invoice_id=row.invoice_id) tgl_bayar=tgl_bayar, invoice_id=row.invoice_id)
self.log.error(msg) self.log.error(msg)
continue continue
q_inv = self.base_q_inv.filter(Invoice.id == pay.spt_id)
inv, pajak, cust, usaha = q_inv.first()
d = get_keys(iso) d = get_keys(iso)
s_tgl = dmyhms(row.tgl) s_tgl = dmyhms(row.tgl)
self.log.info( data = self.__create_data(row, pay, iso, d, tgl_bayar)
f'Tgl bayar {s_tgl}, Nomor bayar {d["nomor_bayar"]}, ' self.__log_progress(s_tgl, data)
f'Jenis Pajak {usaha.usahanm.strip()},' rpt = Pad(**data)
f'STAN {d["stan"]}, NTB {d["ntb"]}, Channel {d["channel"]}')
rpt = Pad(
stan=d['stan'], ntb=d['ntb'], tgl=tgl_bayar,
jam=row.tgl.time(), sspd_id=pay.id,
nomor_bayar=iso.get_invoice_id().strip(),
jenis_pajak=usaha.usahanm.strip(),
masa_pajak=pajak.masapajak, npwpd=cust.npwpd,
nama_wp=cust.customernm, pokok=pay.jml_bayar-pay.denda,
denda=pay.denda, jml_bayar=pay.jml_bayar,
channel_id=iso.get_channel().strip(),
channel_name=d['channel'])
last.nilai = str(row.id) last.nilai = str(row.id)
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)
found = True
return found
def __update_from_id(self):
q_iso = self.__get_query_iso(self.last_id)
found = False
for row in q_iso.order_by(IsoPayment.id).limit(1000):
Doc = BankHandlers[row.bank_id]
iso = get_iso(row.iso_request, Doc, self.option.debug)
tgl_bayar = row.tgl.date()
pay = self.get_pay(row)
rpt = self.get_report(iso)
if not rpt:
if not pay:
msg = ERR_NOT_FOUND.format(
tgl_bayar=tgl_bayar, invoice_id=row.invoice_id)
self.log.error(msg)
continue
rpt = Pad()
d = get_keys(iso)
s_tgl = dmyhms(row.tgl)
data = self.__create_data(row, pay, iso, d, tgl_bayar)
self.__log_progress(s_tgl, data)
rpt.from_dict(data)
with transaction.manager:
self.rpt_session.add(rpt)
found = True
self.last_id = row.id
return found
def run_payment(self): # Override
if self.option.update_from_id:
self.last_id = self.option.update_from_id
func = self.__update_from_id
elif self.option.update_from_date:
tgl = date_from_str(self.option.update_from_date)
q = self.prod_session.query(IsoPayment).filter(
IsoPayment.tgl >= tgl).order_by(
IsoPayment.id)
row = q.first()
self.last_id = row.id - 1
func = self.__update_from_id
else:
func = self.__run_payment
while True:
found = func()
if not found:
break
def get_iso_reversal_orm(self): # Override
return IsoReversal
def get_doc_for_reversal(self, row): # Override
q = self.prod_session.query(IsoPayment).filter_by(id=row.id)
iso_pay = q.first()
return BankHandlers[iso_pay.bank_id]
def run_reversal(self): # Override def run_reversal(self): # Override
super().run_reversal('pad reversal last date') super().run_reversal('pad reversal last date')
......
...@@ -10,9 +10,8 @@ from opensipkd.waktu import ( ...@@ -10,9 +10,8 @@ from opensipkd.waktu import (
create_datetime, create_datetime,
date_from_str, date_from_str,
) )
from sismiop.services.base import get_db_session
from opensipkd.iso8583.bjb.scripts.common import get_module_object from opensipkd.iso8583.bjb.scripts.common import get_module_object
from opensipkd.iso8583.bjb.pbb import Doc from opensipkd.iso8583.bjb.pbb.default import Doc
from opensipkd.iso8583.bjb.pbb.structure import INVOICE_PROFILE from opensipkd.iso8583.bjb.pbb.structure import INVOICE_PROFILE
from ..models import Pbb from ..models import Pbb
from .common import ( from .common import (
...@@ -22,8 +21,10 @@ from .common import ( ...@@ -22,8 +21,10 @@ from .common import (
) )
ERR_NOT_FOUND = 'Tgl {tgl_bayar} SPPT ID {invoice_id} '\ ERR_PSPPT_NOT_FOUND = 'Tgl {tgl_bayar} SPPT ID {invoice_id} '\
'tidak ada di pembayaran_sppt' 'tidak ada di pembayaran_sppt'
ERR_SPPT_NOT_FOUND = 'Tgl {tgl_bayar} SPPT ID {invoice_id}'\
'tidak ada di tabel sppt'
def get_profile(iso): def get_profile(iso):
...@@ -66,7 +67,7 @@ class App(BaseApp): ...@@ -66,7 +67,7 @@ class App(BaseApp):
super().__init__(argv) super().__init__(argv)
if not self.pid: if not self.pid:
return return
d = self.module.Doc() d = Doc()
self.iso_inquiry_orm = d.iso_inquiry_model self.iso_inquiry_orm = d.iso_inquiry_model
self.iso_payment_orm = d.iso_payment_model self.iso_payment_orm = d.iso_payment_model
self.iso_reversal_orm = d.iso_reversal_model self.iso_reversal_orm = d.iso_reversal_model
...@@ -79,8 +80,8 @@ class App(BaseApp): ...@@ -79,8 +80,8 @@ class App(BaseApp):
self.base_q_psppt = self.prod_session.query(self.PembayaranSppt) self.base_q_psppt = self.prod_session.query(self.PembayaranSppt)
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 def get_iso_reversal_orm(self): # Override
return get_db_session() return self.iso_reversal_orm
def get_psppt(self, pay): def get_psppt(self, pay):
q = self.base_q_psppt.filter_by( q = self.base_q_psppt.filter_by(
...@@ -111,8 +112,13 @@ class App(BaseApp): ...@@ -111,8 +112,13 @@ class App(BaseApp):
q_iso = self.base_q_iso.filter(self.iso_inquiry_orm.id > last_id) q_iso = self.base_q_iso.filter(self.iso_inquiry_orm.id > last_id)
return q_iso.order_by(self.iso_inquiry_orm.id) return q_iso.order_by(self.iso_inquiry_orm.id)
def __log_not_found(self, s_tgl, d): def __log_psppt_not_found(self, s_tgl, d):
msg = ERR_NOT_FOUND.format( msg = ERR_PSPPT_NOT_FOUND.format(
tgl_bayar=s_tgl, invoice_id=d['nomor_bayar'])
self.log.error(msg)
def __log_sppt_not_found(self, s_tgl, d):
msg = ERR_SPPT_NOT_FOUND.format(
tgl_bayar=s_tgl, invoice_id=d['nomor_bayar']) tgl_bayar=s_tgl, invoice_id=d['nomor_bayar'])
self.log.error(msg) self.log.error(msg)
...@@ -121,6 +127,9 @@ class App(BaseApp): ...@@ -121,6 +127,9 @@ class App(BaseApp):
def __create_data(self, row_inq, iso, d, tgl_bayar, psppt): def __create_data(self, row_inq, iso, d, tgl_bayar, psppt):
sppt = self.get_sppt(psppt) sppt = self.get_sppt(psppt)
if not sppt:
self.__log_sppt_not_found(tgl_bayar, d)
return
nama_wp = get_nama_wp(iso, sppt) nama_wp = get_nama_wp(iso, sppt)
user_id = get_user_id(iso) user_id = get_user_id(iso)
discount = hasattr(psppt, 'discount') and psppt.discount or None discount = hasattr(psppt, 'discount') and psppt.discount or None
...@@ -152,15 +161,16 @@ class App(BaseApp): ...@@ -152,15 +161,16 @@ class App(BaseApp):
s_tgl = dmyhms(tgl_bayar) s_tgl = dmyhms(tgl_bayar)
psppt = self.get_psppt(row_pay) psppt = self.get_psppt(row_pay)
if not psppt: if not psppt:
self.__log_not_found(s_tgl, d) self.__log_psppt_not_found(s_tgl, d)
continue continue
self.__log_progress(s_tgl, d) self.__log_progress(s_tgl, d)
d = self.__create_data(row_inq, iso, d, tgl_bayar, psppt) d = self.__create_data(row_inq, iso, d, tgl_bayar, psppt)
rpt = Pbb(**d) if d:
last.nilai = str(row_inq.id) rpt = Pbb(**d)
with transaction.manager: last.nilai = str(row_inq.id)
self.rpt_session.add(rpt) with transaction.manager:
self.rpt_session.add(last) self.rpt_session.add(rpt)
self.rpt_session.add(last)
found = True found = True
return found return found
...@@ -174,16 +184,17 @@ class App(BaseApp): ...@@ -174,16 +184,17 @@ class App(BaseApp):
s_tgl = dmyhms(tgl_bayar) s_tgl = dmyhms(tgl_bayar)
psppt = self.get_psppt(row_pay) psppt = self.get_psppt(row_pay)
if not psppt: if not psppt:
self.__log_not_found(s_tgl, d) self.__log_psppt_not_found(s_tgl, d)
continue continue
self.__log_progress(s_tgl, d) self.__log_progress(s_tgl, d)
d = self.__create_data(row_inq, iso, d, tgl_bayar, psppt) d = self.__create_data(row_inq, iso, d, tgl_bayar, psppt)
rpt = self.get_report(iso) if d:
if not rpt: rpt = self.get_report(iso)
rpt = Pbb() if not rpt:
rpt.from_dict(d) rpt = Pbb()
with transaction.manager: rpt.from_dict(d)
self.rpt_session.add(rpt) with transaction.manager:
self.rpt_session.add(rpt)
found = True found = True
self.last_id = row_inq.id self.last_id = row_inq.id
return found return found
...@@ -207,6 +218,9 @@ class App(BaseApp): ...@@ -207,6 +218,9 @@ class App(BaseApp):
if not found: if not found:
break break
def get_doc_for_reversal(self, row):
return Doc
def run_reversal(self): # Override def run_reversal(self): # Override
super().run_reversal('pbb reversal last date') super().run_reversal('pbb reversal last date')
......
import sys
from sqlalchemy import (
Column,
Integer,
String,
UniqueConstraint,
)
import transaction
from opensipkd.string import (
FixLength,
DateTimeVar,
)
from opensipkd.waktu import (
dmyhms,
create_datetime,
date_from_str,
)
from sismiop.services.base import get_id
from ..models import (
Pbb as Report,
Base,
)
from .common import (
BaseApp,
get_channel_name_by_dict,
get_module_object,
)
ERR_NOT_FOUND = 'SPPT ID {invoice_id} pembayaran ke {ke} '\
'tidak ada di pembayaran_sppt'
class Log(Base):
__tablename__ = 'pbb_payment'
id = Column(Integer, primary_key=True)
propinsi = Column(String(2), nullable=False)
kabupaten = Column(String(2), nullable=False)
kecamatan = Column(String(3), nullable=False)
kelurahan = Column(String(3), nullable=False)
blok = Column(String(3), nullable=False)
urut = Column(String(4), nullable=False)
jenis = Column(String(1), nullable=False)
tahun = Column(Integer, nullable=False)
ke = Column(Integer, nullable=False)
kd_kanwil_bank = Column(String(2), nullable=False)
kd_kppbb_bank = Column(String(2), nullable=False)
kd_bank_tunggal = Column(String(2), nullable=False)
kd_bank_persepsi = Column(String(2), nullable=False)
kd_tp = Column(String(2), nullable=False)
channel = Column(String(4))
ntb = Column(String(64))
ntp = Column(String(64))
bank = Column(Integer)
iso_request = Column(String(2048), nullable=False)
__table_args__ = (
UniqueConstraint('propinsi', 'kabupaten', 'kecamatan', 'kelurahan',
'blok', 'urut', 'jenis', 'tahun', 'ke'),
dict(schema='public'))
def get_keys(d):
r = dict()
r['channel'] = get_channel_name_by_dict(d)
r.update(dict(
nomor_bayar=d['bit_061'],
stan=d['bit_011'],
ntb=d['bit_037']))
return r
def get_nama_wp(d):
return d['bit_062']['name']
def get_tgl_bayar(d, year):
raw = d['bit_007']
t = DateTimeVar()
t.set_raw(raw)
return create_datetime(
year, int(t['month']), int(t['day']), int(t['hour']),
int(t['minute']), int(t['second']))
def error(s):
print(s)
sys.exit()
class App(BaseApp):
report_orm = Report
def __init__(self, argv):
super().__init__(argv)
if not self.pid:
return
factory = self.get_factory('pbb_db_url')
self.pbb_session = factory()
self.base_q_log = self.prod_session.query(Log)
self.models = get_module_object(self.conf['models'])
self.PembayaranSppt = self.models.PembayaranSppt
self.Sppt = self.models.Sppt
self.base_q_psppt = self.pbb_session.query(self.PembayaranSppt)
self.base_q_psppt = self.base_q_psppt.filter_by(
kd_kanwil=self.conf['kd_kanwil'],
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'])
def get_psppt(self, pay):
q = self.base_q_psppt.filter_by(
kd_propinsi=pay.propinsi,
kd_dati2=pay.kabupaten,
kd_kecamatan=pay.kecamatan,
kd_kelurahan=pay.kelurahan,
kd_blok=pay.blok,
no_urut=pay.urut,
kd_jns_op=pay.jenis,
thn_pajak_sppt=str(pay.tahun),
pembayaran_sppt_ke=pay.ke)
return q.first()
def get_sppt(self, psppt):
q = self.base_q_sppt.filter_by(
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)
return q.first()
def __get_query_log(self, last_id):
return self.base_q_log.filter(Log.id > last_id).order_by(Log.id)
def __log_not_found(self, row, d):
msg = ERR_NOT_FOUND.format(invoice_id=d['nomor_bayar'], ke=row.ke)
self.log.error(msg)
def __log_progress(self, s_tgl, d):
self.log.info(f'Tgl bayar {s_tgl}, {d}')
def __create_data(self, iso, d, tgl_bayar, psppt):
sppt = self.get_sppt(psppt)
nama_wp = get_nama_wp(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['bit_004'],
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['bit_032'].strip(), channel_nama=d['channel'],
pbb_yg_harus_dibayar_sppt=sppt.pbb_yg_harus_dibayar_sppt,
discount=discount, bank_id=iso['bit_032'], tgl_inquiry=tgl_bayar)
def __run_payment(self):
last = self.get_last_id('pbb json payment last id')
q_log = self.__get_query_log(last.as_int())
found = False
for row in q_log.limit(1000):
iso = eval(row.iso_request)
if self.get_report(iso):
continue
d = get_keys(iso)
psppt = self.get_psppt(row)
if not psppt:
self.__log_not_found(row, d)
continue
tgl_bayar = get_tgl_bayar(iso, psppt.tgl_rekam_byr_sppt.year)
s_tgl = dmyhms(tgl_bayar)
self.__log_progress(s_tgl, d)
d = self.__create_data(iso, d, tgl_bayar, psppt)
rpt = Report(**d)
last.nilai = str(row.id)
with transaction.manager:
self.rpt_session.add(rpt)
self.rpt_session.add(last)
found = True
return found
def __update_from_id(self):
q_log = self.__get_query_log(self.last_id)
found = False
for row_pay in q_log.limit(1000):
iso = eval(row_pay.iso_request)
d = get_keys(iso)
psppt = self.get_psppt(row_pay)
if not psppt:
self.__log_not_found(row_pay, d)
continue
tgl_bayar = get_tgl_bayar(iso, psppt.tgl_rekam_byr_sppt.year)
s_tgl = dmyhms(tgl_bayar)
self.__log_progress(s_tgl, d)
d = self.__create_data(iso, d, tgl_bayar, psppt)
rpt = self.get_report(iso)
if not rpt:
rpt = Pbb()
rpt.from_dict(d)
with transaction.manager:
self.rpt_session.add(rpt)
found = True
self.last_id = row_pay.id
return found
def run_payment(self): # Override
if self.option.update_from_id:
self.last_id = self.option.update_from_id
func = self.__update_from_id
elif self.option.update_from_date:
tgl = date_from_str(self.option.update_from_date)
Psppt = self.PembayaranSppt
q = self.base_q_psppt.filter(Psppt.tgl_rekam_byr_sppt >= tgl)
row_psppt = q.order_by(Psppt.tgl_rekam_byr_sppt).first()
if not row_psppt:
error('Kosong')
invoice_id = get_id(row_psppt)
print(f'DEBUG Invoice ID {invoice_id}')
q = self.base_q_log.filter_by(
propinsi=row_psppt.kd_propinsi,
kabupaten=row_psppt.kd_dati2,
kecamatan=row_psppt.kd_kecamatan,
kelurahan=row_psppt.kd_kelurahan,
blok=row_psppt.kd_blok,
urut=row_psppt.no_urut,
jenis=row_psppt.kd_jns_op,
tahun=row_psppt.thn_pajak_sppt,
ke=row_psppt.pembayaran_sppt_ke)
row_log = q.order_by(Log.id).first()
self.last_id = row_log.id - 1
func = self.__update_from_id
else:
func = self.__run_payment
while True:
found = func()
if not found:
break
def main(argv=sys.argv[1:]):
app = App(argv)
app.run()
[main]
models = sismiop.models.default
db_url = postgresql://user:pass@localhost/db
pbb_db_url = postgresql://user:pass@localhost/db
report_db_url = postgresql://user:pass@localhost/db
pid_file = /home/sugiana/tmp/pbb-json-report.pid
log_file = /home/sugiana/log/pbb-json-report.log
kd_kanwil = 22
kd_kantor = 14
kd_tp = 47
[main]
models = sismiop.models.default
db_url = postgresql://user:pass@localhost/db
report_db_url = postgresql://user:pass@localhost/db
pid_file = /home/sugiana/tmp/pbb-report.pid
log_file = /home/sugiana/log/pbb-report.log
...@@ -36,9 +36,11 @@ setup( ...@@ -36,9 +36,11 @@ setup(
'console_scripts': [ 'console_scripts': [
'payment_report_init_db = payment_report.scripts.common:init_db', 'payment_report_init_db = payment_report.scripts.common:init_db',
'pbb_report = payment_report.scripts.pbb:main', 'pbb_report = payment_report.scripts.pbb:main',
'pbb_json_report = payment_report.scripts.pbb_json:main',
'pospbb_report = payment_report.scripts.pospbb:main', 'pospbb_report = payment_report.scripts.pospbb:main',
'va_pbb_report = payment_report.scripts.va_pbb:main', 'va_pbb_report = payment_report.scripts.va_pbb:main',
'bphtb_report = payment_report.scripts.bphtb:main', 'bphtb_report = payment_report.scripts.bphtb:main',
'bphtb_json_report = payment_report.scripts.bphtb_json:main',
'bphtb2_report = payment_report.scripts.bphtb2:main', 'bphtb2_report = payment_report.scripts.bphtb2:main',
'pad_report = payment_report.scripts.pad:main', 'pad_report = payment_report.scripts.pad:main',
'pad2_report = payment_report.scripts.pad2:main', 'pad2_report = payment_report.scripts.pad2:main',
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!