inquiry.py 3.67 KB
import sys
import locale
import transaction
from datetime import datetime
from configparser import ConfigParser
from optparse import OptionParser
from sqlalchemy import (
    create_engine,
    func,
    )
from opensipkd.hitung import hitung_denda
from opensipkd.base.models import DBSession
from opensipkd.bphtb.cilegon.models import (
    Spt,
    DetailSpt,
    Pembayaran,
    )
import opensipkd.bphtb.cilegon.services
from opensipkd.bphtb.cilegon.services import (
    Inquiry,
    Reversal,
    )


opensipkd.bphtb.cilegon.services.DBSession = DBSession 
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 get_option(argv):
    pars = OptionParser()
    pars.add_option('-i', '--invoice-id')
    pars.add_option('', '--payment', action='store_true')
    pars.add_option('', '--reversal', action='store_true')
    return pars.parse_args(argv)


def show(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_rp('Tagihan', inq.tagihan)
    show_rp('Denda', inq.denda)
    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('Tahun Pajak', inq.get_tahun())
 

def main(argv=sys.argv):
    option, remain = get_option(argv[1:])
    conf_file = remain[0]
    invoice_id = option.invoice_id
    conf = ConfigParser()
    conf.read(conf_file)
    db_url = conf.get('main', 'db_url')
    engine = create_engine(db_url)
    DBSession.configure(bind=engine)
    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 not inq.total:
                print('Tidak ada tagihan, tidak ada yang perlu dibayar.')
                return
            ntb = datetime.now().strftime('%y%m%d%H%M%S')
            pay = inq.do_payment(ntb)
            print(
                'Berhasil dibayar dengan ID pembayaran {}'.format(
                    pay.t_idpembayaranspt))
        if option.reversal:
            rev = Reversal(invoice_id)
            pay = rev.payment
            if not pay:
                print('Belum ada pembayaran, tidak ada yang perlu dibatalkan.')
                return
            if not pay.t_statusbayarspt:
                print(
                    'ID Pembayaran {} sudah dibatalkan.'.format(
                        pay.t_idpembayaranspt))
                return
            rev.do_reversal()
            print(
                'ID Pembayaran {} berhasil dibatalkan'.format(
                    pay.t_idpembayaranspt))