available_invoice.py 1.83 KB
import sys
import locale
from time import time
from configparser import ConfigParser
from sqlalchemy import create_engine
from opensipkd.base.models import DBSession
from opensipkd.bphtb.cilegon.models import (
    Spt,
    DetailSpt,
    Pembayaran,
    )
import opensipkd.bphtb.cilegon.services


opensipkd.bphtb.cilegon.services.DBSession = DBSession
locale.setlocale(locale.LC_ALL, 'id_ID.utf8')
registry = dict()
Inquiry = opensipkd.bphtb.cilegon.services.Inquiry


def thousand(n):
    return locale.format('%.0f', n, True)


class AvailableInvoice:
    def __init__(self, count=10):
        self.count = count 

    def run(self):
        q_pay = DBSession.query(Pembayaran).\
                filter(Pembayaran.t_statusbayarspt == None).\
                order_by(Pembayaran.t_idpembayaranspt.desc())
        offset = -1 
        self.no = 0
        awal = time()
        while True:
            offset += 1
            pay = q_pay.offset(offset).limit(1).first()
            if not pay:
                break
            self.row_handler(pay)
            if time() - awal > 10:
                break
            if self.no == self.count:
                break

    def row_handler(self, pay):
        inq = Inquiry(pay.t_kodebayarbanksppt, registry['persen_denda'])
        if not inq.total:
            return
        self.no += 1
        nominal = thousand(inq.total)
        msg = '#{} {} {} {} {} Rp {}'.format(
                self.no, inq.invoice_id, inq.get_tahun(), inq.get_nop(),
                inq.get_nama(), nominal)
        print(msg)


def main(argv=sys.argv):
    conf_file = argv[1]
    conf = ConfigParser()
    conf.read(conf_file)
    db_url = conf.get('main', 'db_url')
    engine = create_engine(db_url)
    DBSession.configure(bind=engine)
    registry['persen_denda'] = conf.getfloat('main', 'persen_denda')
    a = AvailableInvoice()
    a.run()