available_invoice.py
2 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
from sqlalchemy.orm import sessionmaker
from .db_tools import sppt2nop
from .query import (
CalculateInvoice,
)
class AvailableInvoice:
def __init__(self, models, query, **kwargs):
self.models = models
self.query = query
self.persen_denda = 'persen_denda' in kwargs and \
kwargs['persen_denda'] or 0
def add_option(self, pars):
pars.add_option('', '--min', type='int', help='Tagihan minimum')
pars.add_option('', '--max', type='int', help='Tagihan maksimum')
pars.add_option('-t', '--tahun', help='Tahun pajak')
def show(self, option):
engine = self.models.Base.metadata.bind
session_factory = sessionmaker(bind=engine)
DBSession = session_factory()
Invoice = self.models.Invoice
q = DBSession.query(Invoice).filter_by(status_pembayaran_sppt='0')
if option.min:
q = q.filter(Invoice.pbb_yg_harus_dibayar_sppt >= option.min)
if option.max:
q = q.filter(Invoice.pbb_yg_harus_dibayar_sppt <= option.max)
if option.tahun:
q = q.filter(Invoice.thn_pajak_sppt == option.tahun)
offset = -1
count = 0
while True:
if count >= option.sample_count:
break
offset += 1
row = q.offset(offset).first()
if not row:
break
calc = CalculateInvoice(
self.models, DBSession, self.persen_denda, row.kd_propinsi,
row.kd_dati2, row.kd_kecamatan, row.kd_kelurahan,
row.kd_blok, row.no_urut, row.kd_jns_op,
row.thn_pajak_sppt)
if calc.total < 1:
continue
count += 1
invoice_id_raw = sppt2nop(calc.invoice) + \
calc.invoice.thn_pajak_sppt
msg = '#{no}/{count} {id} Rp {total}'.format(
no=count, id=invoice_id_raw, total=calc.total,
count=option.sample_count)
print(msg)