inquiry.py
3.63 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
105
106
107
108
109
110
import sys
import locale
from datetime import date
from configparser import ConfigParser
from optparse import OptionParser
import transaction
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from zope.sqlalchemy import register
import sismiop.services.base
locale.setlocale(locale.LC_ALL, 'id_ID.utf8')
def thousand(n):
return locale.format('%.0f', n, True)
def show_val(label, value):
print('{}: {}'.format(label, value))
def show_rp(label, value):
show_val(label, 'Rp {}'.format(thousand(value)))
def date_from_str(s):
d, m, y = s.split('-')
return date(int(y), int(m), int(d))
def get_option(argv):
help_tgl = 'butuh --payment'
pars = OptionParser()
pars.add_option('-i', '--invoice-id')
pars.add_option('', '--payment', action='store_true')
pars.add_option('', '--tgl-bayar', help=help_tgl)
pars.add_option('', '--reversal', action='store_true')
return pars.parse_args(argv)
def show(inq):
show_val('Invoice ID', inq.invoice_id_raw)
show_val('Kelurahan Objek Pajak', inq.get_kelurahan_op())
show_val('Kecamatan Objek Pajak', inq.get_kecamatan_op())
show_val('Provinsi Objek Pajak', inq.get_propinsi_op())
show_val('Alamat Objek Pajak', inq.get_alamat_op())
show_val('Luas Tanah', inq.get_luas_tanah())
show_val('Luas Bangunan', inq.get_luas_bangunan())
show_rp('Tagihan', inq.tagihan)
show_rp('Denda', inq.denda)
show_rp('Total Bayar', inq.total_bayar)
show_rp('Total Tagihan', inq.total)
show_val('Jatuh Tempo', inq.get_jatuh_tempo())
show_val('Tahun Pajak', inq.get_tahun())
def main(argv=sys.argv):
option, remain = get_option(argv[1:])
invoice_id = option.invoice_id
if option.tgl_bayar:
tgl_bayar = date_from_str(option.tgl_bayar)
else:
tgl_bayar = None
conf_file = remain[0]
conf = ConfigParser()
conf.read(conf_file)
module_name = conf.get('main', 'module')
module = __import__('sismiop.services.' + module_name)
sub_module = getattr(module.services, module_name)
Inquiry = sub_module.Inquiry
Reversal = sub_module.Reversal
db_url = conf.get('main', 'db_url')
engine = create_engine(db_url)
session_factory = sessionmaker(bind=engine)
sismiop.services.base.DBSession = session_factory()
register(sismiop.services.base.DBSession)
with transaction.manager:
inq = Inquiry(invoice_id, conf.getfloat('main', 'persen_denda'))
if not inq.invoice:
print('Invoice ID {} tidak ada.'.format(invoice_id))
return
show(inq)
if option.payment:
if inq.is_paid():
print('Tidak ada tagihan, tidak ada yang perlu dibayar.')
return
if not inq.is_available():
print('Tagihan tidak diperkenankan dibayar melalui jalur ini.')
return
tp = dict(
kd_kanwil=conf.get('main', 'kd_kanwil'),
kd_kantor=conf.get('main', 'kd_kantor'),
kd_tp=conf.get('main', 'kd_tp'))
nip = conf.get('main', 'nip_pencatat')
pay = inq.do_payment(tp, nip, tgl_bayar)
print(
'Berhasil dibayar pada urutan ke-{}'.format(
pay.pembayaran_sppt_ke))
if option.reversal:
rev = Reversal(invoice_id)
pay = rev.payment
if not pay:
print('Pembayaran tidak ditemukan, tidak ada yang perlu dibatalkan.')
return
rev.do_reversal()
print(
'Pembayaran ke-{} berhasil dibatalkan'.format(
pay.pembayaran_sppt_ke))