Commit 20c3d1d4 by root

Tambah PAD Kabupaten Bandung

1 parent 73f403f6
2.7 2022-12-20
2.8 2022-12-26
--------------
- Penambahan kd_tp VA & QRIS jika nip_pospbb sama
- Konfigurasi service bisa memuat class Handler untuk sumber data yang sangat
berbeda.
2.6 2022-12-16
--------------
......
from datetime import (
datetime,
time,
)
import requests
import transaction
from payment_report.scripts.tools import (
plain_values,
update,
)
from payment_report.scripts.common import InvalidSource
def get_data(base_url, username, password, tgl_awal, tgl_akhir):
awal = tgl_awal.strftime('%Y-%m-%d')
akhir = tgl_akhir.strftime('%Y-%m-%d')
url = base_url + f'?tgl_awal={awal}&tgl_akhir={akhir}'
print(url)
session = requests.Session()
session.auth = (username, password)
r = session.get(url)
if r.status_code != 200:
raise InvalidSource(f'HTTP Response Code = {r.status_code}')
r = r.json()
return r['data']
class Handler:
def __init__(self, parent):
self.parent = parent
def get_data(self):
return get_data(
self.parent.conf['api_url'], self.parent.conf['api_user'],
self.parent.conf['api_pass'], self.parent.tgl_awal,
self.parent.tgl_akhir)
def get_count(self): # dipanggil parent
self.data = self.get_data()
return len(self.data)
def get_report(self, pay):
session = self.parent.get_session_for_save()
q = session.query(self.parent.report_orm).filter_by(
nomor_bayar=pay['nomor_bayar'])
return q.first()
def create_data(self, pay):
print(pay)
tgl = datetime.strptime(pay['tanggal'], '%Y-%m-%d')
tgl = tgl.date()
if pay['jam']:
jam = datetime.strptime(pay['jam'], '%H:%M:%S')
jam = jam.time()
else:
jam = time(0, 0, 0)
channel_id = pay['kode_channel'] or '0000'
return dict(
tgl=tgl, jam=jam, nomor_bayar=pay['nomor_bayar'],
jenis_pajak=pay['nama_pajak'], masa_pajak=0,
npwpd=pay['npwpd'], nama_wp=pay['nama_wp'],
pokok=float(pay['pokok']), denda=float(pay['denda']), bunga=0,
jml_bayar=float(pay['jumlah']), channel_id=channel_id,
channel_name=pay['nama_channel'], bank_id=110)
def update_from_date(self):
no = 0
for pay in self.data:
self.parent.invoice_id = pay['nomor_bayar']
no += 1
try:
source = self.create_data(pay)
d = plain_values(source)
rpt = self.get_report(pay)
if rpt:
target = rpt.to_dict()
target_update, log_msg = update(source, target)
if target_update:
s = ', '.join(log_msg)
msg = f'UPDATE {d} change {s}'
rpt.from_dict(target_update)
else:
msg = f'ALREADY SAME {d}'
rpt = None
if self.parent.count == 1 and self.last: # Hemat log
print(msg)
print('Log yang sama, abaikan.')
return
else:
msg = f'INSERT {d}'
rpt = self.parent.report_orm(**source)
msg = f'{self.parent.get_prefix_log()} {msg}'
log_method = self.parent.log.info
except InvalidSource as e:
msg = str(e)
log_method = self.parent.log.warning
rpt = None
e = self.parent.get_estimate(no)
log_method(f'#{no}/{self.parent.count} {msg}, estimate {e}')
if rpt:
session = self.parent.get_session_for_save()
with transaction.manager:
session.add(rpt)
self.last_pay = pay
......@@ -65,7 +65,7 @@ BIT_PROFILE_NAMES = {
'BLIBLI': 'BLIBLI',
'ARTPAY': 'ARTPAY',
'H646': 'DANA',
'000000000000000': 'ALFAMIDI'}
'ALFAMIDI': 'ALFAMIDI'}
BANK_NAMES = {
'8': 'MANDIRI',
......@@ -292,12 +292,18 @@ class BaseApp:
self.pid = make_pid_file(self.conf['pid_file'])
if not self.pid:
return
self.handler = None
self.log = create_log(self.conf['log_file'])
if 'models' in self.conf:
self.models = get_module_object(self.conf['models'])
if 'service' in self.conf:
self.service = get_module_object(self.conf['service'])
try:
self.handler = self.service.Handler(self)
except AttributeError as e:
pass
module_conf = dict(self.conf)
if 'db_url' in self.conf:
factory = self.get_factory('db_url')
self.prod_session = factory()
factory = self.get_factory('report_db_url')
......@@ -421,10 +427,16 @@ class BaseApp:
self.last = self.get_last_id(self.conf_name)
self.tgl_awal = self.last.as_datetime()
while True:
if self.handler:
self.count = self.handler.get_count()
else:
self.count = self.get_count()
if not self.count:
return
self.start_time = time()
if self.handler:
found = self.handler.update_from_date()
else:
found = self.update_from_date()
if not found:
break
......
......@@ -43,6 +43,8 @@ class App(BaseApp):
super().__init__(argv)
if not self.pid:
return
if self.handler:
return
Usaha = self.models.Usaha
Pajak = self.models.Pajak
Customer = self.models.Customer
......
......@@ -288,7 +288,8 @@ class App(BaseApp):
channel_nama = 'QRIS'
else:
tgl = psppt.tgl_rekam_byr_sppt.date()
channel_nama = self.get_va_channel(tgl) or 'MANUAL'
channel_nama = self.get_va_channel(tgl) \
or 'MANUAL'
return channel_kode, channel_nama, stan, ntb, bank_id, user_id, \
tgl_inquiry
......@@ -322,7 +323,7 @@ class App(BaseApp):
discount=discount or 0, tgl_pembayaran_sppt=tgl,
tgl_inquiry=tgl_inquiry,
tgl_rekam_byr_sppt=psppt.tgl_rekam_byr_sppt,
nm_wp_sppt=sppt.nm_wp_sppt.strip(), channel_kode=channel_kode,
nm_wp_sppt=sppt.nm_wp_sppt, channel_kode=channel_kode,
channel_nama=channel_nama, bank_id=bank_id, user_id=user_id,
pbb_yg_harus_dibayar_sppt=pokok)
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!