inquiry.py
4.24 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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
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_val('Nama Wajib Pajak', inq.get_nama_wp())
show_rp('Tagihan', inq.tagihan)
show_rp('Denda', inq.denda)
show_rp('Total Bayar Sebelumnya', inq.total_bayar)
show_rp('Total Tagihan', inq.total)
show_val('Jatuh Tempo', inq.get_jatuh_tempo())
show_val('Bulan Tunggakan', inq.bln_tunggakan)
show_val('Tahun Pajak', inq.get_tahun())
def show_fields(row, fieldnames):
for fieldname in fieldnames:
value = getattr(row, fieldname)
show_rp('Field ' + fieldname, value)
def show_payment(module_name, inq, pay):
print(
'Berhasil dibayar pada urutan ke-{}'.format(
pay.pembayaran_sppt_ke))
if module_name not in ['bogor_kota']:
return
print('Tabel pembayaran_sppt')
show_fields(pay, ['jml_sppt_yg_dibayar', 'denda_sppt'])
pc = inq.get_pengurangan_covid(pay)
if not pc:
return
print('Tabel pengurangan_covid')
show_fields(pc, ['bayar', 'denda'])
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)
show_payment(module_name, inq, pay)
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))