webr_checksum.py
1.78 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
import sys
from argparse import ArgumentParser
from configparser import ConfigParser
from datetime import (
date,
datetime,
timedelta,
)
from sqlalchemy import (
create_engine,
func,
)
from sqlalchemy.orm import sessionmaker
from opensipkd.waktu import dmy
from opensipkd.webr.models.default import Payment
from payment_report.models import Webr
default_tgl = dmy(date.today())
help_tgl = f'default {default_tgl}'
pars = ArgumentParser()
pars.add_argument('conf')
pars.add_argument('--tgl', default=default_tgl, help=help_tgl)
option = pars.parse_args(sys.argv[1:])
conf = ConfigParser()
conf.read(option.conf)
cf = dict(conf.items('main'))
t = option.tgl.split(',')
tgl_awal = datetime.strptime(t[0], '%d-%m-%Y')
tgl_awal = tgl_awal.date()
if t[1:]:
tgl_akhir = datetime.strptime(t[1], '%d-%m-%Y')
tgl_akhir = tgl_akhir.date()
else:
tgl_akhir = tgl_awal
one_day = timedelta(1)
engine_prod = create_engine(cf['db_url'])
engine_rpt = create_engine(cf['report_db_url'])
factory_prod = sessionmaker(bind=engine_prod)
factory_rpt = sessionmaker(bind=engine_rpt)
db_session_prod = factory_prod()
db_session_rpt = factory_rpt()
awal = tgl_awal
while True:
q_rpt = db_session_rpt.query(func.sum(Webr.jml_bayar)).filter(
Webr.tgl == awal)
rpt_sum = q_rpt.scalar() or 0
rpt_sum = int(rpt_sum)
q_prod = db_session_prod.query(func.sum(Payment.bayar)).filter(
Payment.tgl_bayar >= awal, Payment.tgl_bayar < awal + one_day)
prod_sum = q_prod.scalar() or 0
if rpt_sum == prod_sum:
status = 'Sama'
else:
status = 'Beda'
rpt_s = '{0:,}'.format(rpt_sum)
prod_s = '{0:,}'.format(prod_sum)
print(f'{dmy(awal)}, Report {rpt_s}, Production {prod_s}, {status}')
if awal == tgl_akhir:
break
awal += one_day