inquiry.py 4.13 KB
import sys
from datetime import datetime
from argparse import ArgumentParser
import transaction
from opensipkd.string.money import thousand
from opensipkd.waktu import date_from_str
from .common import init


help_tgl_bayar = 'format dd-mm-yyyy'


def show_val(label, value):
    print('{}: {}'.format(label, value))


def show_rp(label, value):
    show_val(label, 'Rp {}'.format(thousand(value)))


def show_field(t, fieldname):
    label = 'Field ' + fieldname
    try:
        value = getattr(t, fieldname)
    except AttributeError:
        return
    if isinstance(value, float):
        show_rp(label, value)
    else:
        show_val(label, value)


def show_fields(row, fieldnames):
    for fieldname in fieldnames:
        show_field(row, fieldname)


def get_option(argv):
    pars = ArgumentParser()
    pars.add_argument('conf', help='File konfigurasi')
    pars.add_argument('--invoice-id', required=True)
    pars.add_argument('--tgl-bayar', help=help_tgl_bayar)
    pars.add_argument('--payment', action='store_true')
    pars.add_argument('--reversal', action='store_true')
    return pars.parse_args(argv)


def show_payment_from_inquiry(inq):
    pay = inq.get_payment()
    if pay:
        show_payment(pay)


def show_payment(pay):
    print('Tabel {}:'.format(pay.__table__.name))
    # Binjai
    show_fields(
        pay, ['id', 'jumlah_bayar', 'tanggal_bayar', 'user_bayar',
              'kirim_bpn'])
    # Kota Bekasi
    show_fields(
        pay, ['nop', 'ntpd', 'pembayaran_bphtb_ke', 'bphtb_dibayar',
              'tgl_pembayaran_bphtb', 'nip_rekam_byr', 'reversal',
              'tanggal_reversal'])


def show_inquiry(inq):
    show_val('Invoice ID', inq.invoice_id)
    show_val('Luas Tanah', inq.get_luas_tanah())
    show_val('Luas Bangunan', inq.get_luas_bangunan())
    show_rp('NPOP', inq.get_npop())
    show_val('Jenis Perolehan Hak', inq.get_jenis_perolehan_hak())
    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('Kota Objek Pajak', inq.get_kota_op())
    show_val('NOP', inq.get_nop())
    show_val('Jatuh Tempo', inq.get_jatuh_tempo() or '')
    show_rp('Tagihan', inq.tagihan)
    show_rp('Denda', inq.denda)
    show_rp('Discount', inq.discount)
    show_rp('Total Bayar', inq.total_bayar)
    show_rp('Total Tagihan', inq.total)
    show_val('Nama Notaris', inq.get_nama_notaris())
    show_val('Nama Wajib Pajak', inq.get_nama())
    show_val('NPWP', inq.get_npwp())
    show_val('Alamat Wajib Pajak', inq.get_alamat_wp())
    show_val('Kelurahan Wajib Pajak', inq.get_kelurahan_wp())
    show_val('Kecamatan Wajib Pajak', inq.get_kecamatan_wp())
    show_val('RT Wajib Pajak', inq.get_rt_wp())
    show_val('RW Wajib Pajak', inq.get_rw_wp())
    show_val('Kode Pos Wajib Pajak', inq.get_kode_pos_wp())
    show_val('Kota Wajib Pajak', inq.get_kota_wp())
    show_val('Tahun Pajak', inq.get_tahun())
    show_val('Is Available', inq.is_available())
    show_payment_from_inquiry(inq)


def error(s):
    print(s)
    sys.exit()


def main(argv=sys.argv):
    option = get_option(argv[1:])
    conf, services = init(option)
    invoice_id = option.invoice_id
    tgl_bayar = option.tgl_bayar and date_from_str(option.tgl_bayar)
    inq = services.Inquiry(invoice_id, conf, tgl_bayar)
    if not inq.invoice:
        error(f'Invoice ID {invoice_id} tidak ada.')
    show_inquiry(inq)
    if option.payment:
        if not inq.total:
            error('Tidak ada tagihan, tidak ada yang perlu dibayar.')
        if not inq.is_available():
            error('Tagihan ini tidak bisa dibayarkan.')
        ntb = datetime.now().strftime('%y%m%d%H%M%S')
        with transaction.manager:
            pay = inq.do_payment(ntb)
            show_payment(pay)
            print('Berhasil dibayar')
    if option.reversal:
        rev = services.Reversal(invoice_id)
        pay = rev.payment
        if not pay:
            error(
                'Pembayaran tidak ditemukan, tidak ada yang perlu dibatalkan.')
        with transaction.manager:
            rev.do_reversal()
            show_payment(pay)
        print('Berhasil dibatalkan')