webr_checksum.py 1.78 KB
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