bandung_kab.py
3.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
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