inquiry.py
4.27 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
132
133
134
135
136
137
138
139
140
141
142
import sys
from datetime import datetime
from argparse import ArgumentParser
import transaction
from opensipkd.string.money import thousand
from .common import init
ERR_PAYMENT_NOT_FOUND = 'Pembayaran tidak ditemukan, '\
'tidak ada yang perlu dibatalkan.'
def show_val(label, value):
if value is None:
value = ''
print('{}: {}'.format(label, value))
def show_rp(label, value):
show_val(label, 'Rp {}'.format(thousand(value, 2)))
def show_field(t, fieldname):
if isinstance(t, dict):
return
label = f'Field {t.__tablename__}.{fieldname}'
try:
value = getattr(t, fieldname)
except AttributeError:
return
if isinstance(value, float):
show_rp(label, value)
else:
show_val(label, value)
def get_option(argv):
pars = ArgumentParser()
pars.add_argument('conf')
pars.add_argument('--invoice-id')
pars.add_argument('--payment', action='store_true')
pars.add_argument('--reversal', action='store_true')
pars.add_argument('--tgl-bayar')
return pars.parse_args(argv)
def show(inq):
if isinstance(inq.invoice_id, str):
invoice_id = inq.invoice_id
else:
invoice_id = inq.invoice_id.get_raw()
show_val('Invoice ID', invoice_id)
show_val('Tahun Pajak', inq.get_tahun())
show_val('Masa 1', inq.get_masa_1())
show_val('Masa 2', inq.get_masa_2())
if inq.get_kohir_model():
show_val('Tanggal Kohir', inq.get_tgl_kohir())
show_val('Kode Rekening', inq.get_kode_rekening())
show_val('Nama Rekening', inq.get_nama_rekening())
show_val('Jenis Usaha', inq.get_nama_jenis_usaha())
show_val('Tipe', inq.get_type_name())
show_val('Self', inq.is_self())
show_val('NPWPD', inq.get_npwp())
show_val('Nama Wajib Pajak', inq.get_nama())
show_val('Alamat Wajib Pajak', inq.get_alamat_wp())
show_val('Kode Pos Wajib Pajak', inq.get_kode_pos_wp())
show_val('Alamat Objek Pajak', inq.get_alamat_op())
show_val('Kelurahan Objek Pajak', inq.get_kelurahan_op())
show_val('Kecamatan Objek Pajak', inq.get_kecamatan_op())
show_val('Jatuh Tempo', inq.get_jatuh_tempo())
show_val('Jumlah Bulan Denda', inq.bln_tunggakan)
show_rp('Tagihan', inq.tagihan)
show_field(inq.invoice, 'pajak_terhutang')
show_field(inq.invoice, 'bunga')
try:
show_rp('Denda Jatuh Tempo', inq.denda_waktu)
except AttributeError:
pass
show_rp('Discount Denda', inq.discount_denda)
if inq.notes:
show_val('Note', inq.notes)
show_rp('Total Denda', inq.denda)
show_rp('Total Bayar', inq.total_bayar)
show_rp('Total Tagihan', inq.total)
show_field(inq.invoice, 'status_pembayaran')
show_field(inq.invoice, 'status_bayar')
if inq.total_bayar:
pay = inq.get_payment()
show_field(pay, 'sspdtgl')
show_field(pay, 'id')
show_field(pay, 'discount_denda')
def show_pkey_values(row):
print('Primary key tabel {}:'.format(row.__table__.name))
for c in row.__table__.columns:
if c.primary_key:
val = getattr(row, c.name)
show_val(' '+c.name, val)
def error(s):
print(s)
sys.exit()
def date_from_str(s):
d, m, y = s.split('-')
return datetime(int(y), int(m), int(d))
def main(argv=sys.argv):
option = get_option(argv[1:])
conf, services = init(option)
invoice_id = option.invoice_id
if option.tgl_bayar:
tgl_bayar = date_from_str(option.tgl_bayar)
else:
tgl_bayar = None
inq = services.Inquiry(invoice_id, conf, tgl_bayar)
if not inq.invoice:
error('Invoice ID {} tidak ada.'.format(invoice_id))
show(inq)
if option.payment:
if not inq.total:
error('Tidak ada tagihan, tidak ada yang perlu dibayar.')
ntb = datetime.now().strftime('%y%m%d%H%M%S')
with transaction.manager:
pay = inq.do_payment(ntb)
show_pkey_values(pay)
show_field(pay, 'is_valid')
print('Berhasil dibayar')
if option.reversal:
rev = services.Reversal(invoice_id)
pay = rev.payment
if not pay:
error(ERR_PAYMENT_NOT_FOUND)
with transaction.manager:
rev.do_reversal()
show_pkey_values(pay)
show_field(pay, 'is_valid')
print('Berhasil dibatalkan')