Commit 01afbd29 by Owo Sugiana

Tambah PKB

1 parent f1458241
3.1.7 2025-02-27
----------------
- Tambah PKB
3.1.6 2025-02-20 3.1.6 2025-02-20
---------------- ----------------
- Bug fixed Fortuna - Bug fixed Fortuna
......
...@@ -232,3 +232,21 @@ class PbbInvoice(Base): ...@@ -232,3 +232,21 @@ class PbbInvoice(Base):
kd_propinsi, kd_dati2, kd_kecamatan, kd_kelurahan, kd_propinsi, kd_dati2, kd_kecamatan, kd_kelurahan,
kd_blok, no_urut, kd_jns_op, thn_pajak_sppt), kd_blok, no_urut, kd_jns_op, thn_pajak_sppt),
) )
class Pkb(Base, Common):
__tablename__ = 'pkb_report'
id = Column(Integer, primary_key=True)
waktu = Column(DateTime(timezone=True), nullable=False)
tgl = Column(Date, nullable=False)
no_polisi = Column(String(9), nullable=False)
nominal = Column(Float, nullable=False)
channel = Column(String(32), nullable=False)
pemilik = Column(String(128), nullable=False)
merek = Column(String(32), nullable=False)
jenis_kb = Column(String(32), nullable=False)
jenis_trx = Column(String(32), nullable=False)
kasir = Column(String(32))
lokasi = Column(String(64), nullable=False)
__table_args__ = (
UniqueConstraint(waktu, no_polisi),)
...@@ -70,11 +70,10 @@ class App(BaseApp): ...@@ -70,11 +70,10 @@ class App(BaseApp):
self.last_pay = None self.last_pay = None
for trx in d['transaksi']: for trx in d['transaksi']:
self.invoice_id = ''.join([trx['nop'], trx['tahun']]) self.invoice_id = ''.join([trx['nop'], trx['tahun']])
data = create_data(trx)
no += 1 no += 1
source = create_data(trx) source = create_data(trx)
d = plain_values(source) d = plain_values(source)
rpt = self.get_report(data) rpt = self.get_report(source)
if rpt: if rpt:
target = rpt.to_dict() target = rpt.to_dict()
target_update, log_msg = update(source, target) target_update, log_msg = update(source, target)
......
from datetime import (
date,
datetime,
timedelta,
)
from time import time
import requests
from logging import getLogger
import transaction
from opensipkd.waktu import create_datetime
from ..models import Pkb
from ..common import BaseApp
from ..tools import (
plain_values,
update,
)
one_day = timedelta(1)
CHANNELS = {'Non Tunai Tranfer': 'TRANSFER'}
def create_data(d):
w = ' '.join([d['tgl_pay_flag'], d['jam_pay_flag']])
w = datetime.strptime(w, '%d/%m/%Y %H:%M:%S')
waktu = create_datetime(w.year, w.month, w.day, w.hour, w.minute, w.second)
channel = d['chanel_pembayaran']
channel = CHANNELS.get(channel, channel.split()[-1].upper())
return dict(
waktu=waktu,
tgl=waktu.date(),
no_polisi=d['no_polisi'],
nominal=float(d['nominal']),
channel=channel,
pemilik=d['nm_pemilik'],
merek=d['nm_merek_kb'],
jenis_kb=d['nm_jenis_kb'],
jenis_trx=d['nm_jen_trans'],
kasir=d['nm_kasir'],
lokasi=d['nm_lokasi'])
class App(BaseApp):
report_orm = Pkb
conf_name = 'pkb api last date'
def get_report(self, d):
session = self.get_session_for_save()
q = session.query(self.report_orm).filter_by(
waktu=d['waktu'], no_polisi=d['no_polisi'])
return q.first()
def do_sync(self, tgl):
d = dict(tanggal=tgl.strftime('%Y-%m-%d'))
headers = {'X-Authorization': self.conf['key']}
data = dict(
tanggal=tgl.strftime('%d/%m/%Y'),
kd_lokasi=self.conf['kd_lokasi'], kode=self.conf['kode'])
r = requests.post(self.conf['url'], headers=headers, json=data)
if r.status_code != 200:
print('HTTP error', r.status_code)
print(r.text)
return
log = getLogger('do_sync()')
d = r.json()
no = 0
self.last_pay = None
rows = []
for trx in d.get('data', []):
if not trx['flagging']:
continue
for key, value in trx['flagging'].items():
rows.append(value)
self.count = len(rows)
for value in rows:
source = create_data(value)
self.invoice_id = ' '.join([
value['no_polisi'], source['tgl'].strftime('%Y-%m-%d')])
no += 1
d = plain_values(source)
rpt = self.get_report(source)
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.count == 1 and self.last: # Hemat log
print(msg)
print('Log yang sama, abaikan.')
return
else:
msg = f'INSERT {d}'
rpt = self.report_orm(**source)
e = self.get_estimate(no)
prefix = self.get_prefix_log()
log.info(f'#{no}/{self.count} {prefix} {msg}, estimate {e}')
if rpt:
session = self.get_session_for_save()
with transaction.manager:
session.add(rpt)
self.last_pay = source
return self.count
def get_last_time(self): # Override
return self.last_pay['waktu'].strftime('%d-%m-%Y')
def prepare_query_filter(self):
if 'tgl_awal' in self.conf:
self.last = None
self.tgl_awal = self.conf['tgl_awal']
else:
self.last = self.get_last_id(self.conf_name)
self.tgl_awal = self.last.as_date()
if 'tgl_akhir' in self.conf:
self.tgl_akhir = self.conf['tgl_akhir']
else:
self.tgl_akhir = date.today()
def run(self): # dipanggil sync.py
self.prepare_query_filter()
tgl = self.tgl_awal
while True:
tgl += one_day
self.start_time = time()
self.do_sync(tgl)
if self.last_pay and self.last:
self.update_last()
if tgl > self.tgl_akhir:
break
...@@ -5,3 +5,4 @@ bphtb payment last date,01-01-2000 00:00:00,bphtb.bphtb_bank.tanggal terakhir ya ...@@ -5,3 +5,4 @@ bphtb payment last date,01-01-2000 00:00:00,bphtb.bphtb_bank.tanggal terakhir ya
pbb payment last date,1-1-2000 00:00:00,pembayaran_sppt.tgl_rekam_byr_sppt terakhir yang diproses pbb payment last date,1-1-2000 00:00:00,pembayaran_sppt.tgl_rekam_byr_sppt terakhir yang diproses
pbb va payment last date,1-1-2000 00:00:00,bjb_va_payment.transaction_date terakhir yang diproses pbb va payment last date,1-1-2000 00:00:00,bjb_va_payment.transaction_date terakhir yang diproses
pbb api last date,31-12-2024 00:00:00,tanggal terakhir yang diproses pbb api last date,31-12-2024 00:00:00,tanggal terakhir yang diproses
pkb api last date,31-12-2024,tanggal terakhir yang diproses
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!