Commit 547db4ef by Owo Sugiana

Tambah tabel tempat_pembayaran

1 parent 3f365f1c
...@@ -11,6 +11,7 @@ from .pembayaran_sppt import PembayaranSpptMixin ...@@ -11,6 +11,7 @@ from .pembayaran_sppt import PembayaranSpptMixin
from .kelurahan import KelurahanMixin from .kelurahan import KelurahanMixin
from .kecamatan import KecamatanMixin from .kecamatan import KecamatanMixin
from .propinsi import PropinsiMixin from .propinsi import PropinsiMixin
from .tempat_pembayaran import TempatPembayaranMixin
Base = declarative_base() Base = declarative_base()
...@@ -40,6 +41,9 @@ class Propinsi(Base, PropinsiMixin): ...@@ -40,6 +41,9 @@ class Propinsi(Base, PropinsiMixin):
pass pass
class TempatPembayaran(Base, TempatPembayaranMixin):
pass
class PenguranganCovid(Base): class PenguranganCovid(Base):
__tablename__ = 'pengurangan_covid' __tablename__ = 'pengurangan_covid'
kd_propinsi = Column(String(2), primary_key=True) kd_propinsi = Column(String(2), primary_key=True)
...@@ -51,7 +55,7 @@ class PenguranganCovid(Base): ...@@ -51,7 +55,7 @@ class PenguranganCovid(Base):
kd_jns_op = Column(String(1), primary_key=True) kd_jns_op = Column(String(1), primary_key=True)
thn_pajak_sppt = Column(String(4), primary_key=True) thn_pajak_sppt = Column(String(4), primary_key=True)
pembayaran_sppt_ke = Column(Integer, primary_key=True) pembayaran_sppt_ke = Column(Integer, primary_key=True)
pokok = Column(Float, nullable=False) bayar = Column(Float, nullable=False)
denda = Column(Float, nullable=False) denda = Column(Float, nullable=False)
#__table_args__ = ( #__table_args__ = (
# ForeignKeyConstraint( # ForeignKeyConstraint(
......
from sqlalchemy import (
Column,
String,
)
from sqlalchemy.ext.declarative import declared_attr
class TempatPembayaranMixin:
@declared_attr
def __tablename__(self):
return 'tempat_pembayaran'
@declared_attr
def kd_kanwil(self):
return Column(String(2), primary_key=True)
@declared_attr
def kd_kantor(self):
return Column(String(2), primary_key=True)
@declared_attr
def kd_tp(self):
return Column(String(2), primary_key=True)
...@@ -51,12 +51,34 @@ def show(inq): ...@@ -51,12 +51,34 @@ def show(inq):
show_val('Nama Wajib Pajak', inq.get_nama_wp()) show_val('Nama Wajib Pajak', inq.get_nama_wp())
show_rp('Tagihan', inq.tagihan) show_rp('Tagihan', inq.tagihan)
show_rp('Denda', inq.denda) show_rp('Denda', inq.denda)
show_rp('Total Bayar', inq.total_bayar) show_rp('Total Bayar Sebelumnya', inq.total_bayar)
show_rp('Total Tagihan', inq.total) show_rp('Total Tagihan', inq.total)
show_val('Jatuh Tempo', inq.get_jatuh_tempo()) show_val('Jatuh Tempo', inq.get_jatuh_tempo())
show_val('Bulan Tunggakan', inq.bln_tunggakan)
show_val('Tahun Pajak', inq.get_tahun()) 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): def main(argv=sys.argv):
option, remain = get_option(argv[1:]) option, remain = get_option(argv[1:])
invoice_id = option.invoice_id invoice_id = option.invoice_id
...@@ -96,9 +118,7 @@ def main(argv=sys.argv): ...@@ -96,9 +118,7 @@ def main(argv=sys.argv):
kd_tp=conf.get('main', 'kd_tp')) kd_tp=conf.get('main', 'kd_tp'))
nip = conf.get('main', 'nip_pencatat') nip = conf.get('main', 'nip_pencatat')
pay = inq.do_payment(tp, nip, tgl_bayar) pay = inq.do_payment(tp, nip, tgl_bayar)
print( show_payment(module_name, inq, pay)
'Berhasil dibayar pada urutan ke-{}'.format(
pay.pembayaran_sppt_ke))
if option.reversal: if option.reversal:
rev = Reversal(invoice_id) rev = Reversal(invoice_id)
pay = rev.payment pay = rev.payment
......
...@@ -18,7 +18,8 @@ DBSession = None ...@@ -18,7 +18,8 @@ DBSession = None
locale.setlocale(locale.LC_ALL, 'id_ID.utf8') locale.setlocale(locale.LC_ALL, 'id_ID.utf8')
INVOICE_ID = [ # Nomor Objek Pajak
NOP = [
('Propinsi', 2, 'N'), ('Propinsi', 2, 'N'),
('Kabupaten', 2, 'N'), ('Kabupaten', 2, 'N'),
('Kecamatan', 3, 'N'), ('Kecamatan', 3, 'N'),
...@@ -26,6 +27,9 @@ INVOICE_ID = [ ...@@ -26,6 +27,9 @@ INVOICE_ID = [
('Blok', 3, 'N'), ('Blok', 3, 'N'),
('Urut', 4, 'N'), ('Urut', 4, 'N'),
('Jenis', 1, 'N'), ('Jenis', 1, 'N'),
]
INVOICE_ID = NOP + [
('Tahun', 4, 'N'), ('Tahun', 4, 'N'),
] ]
...@@ -38,11 +42,14 @@ def thousand(n): ...@@ -38,11 +42,14 @@ def thousand(n):
return locale.format('%0.f', n, True) return locale.format('%0.f', n, True)
def get_id(row): def get_nop(row):
return ''.join( return ''.join(
[row.kd_propinsi, row.kd_dati2, row.kd_kecamatan, [row.kd_propinsi, row.kd_dati2, row.kd_kecamatan,
row.kd_kelurahan, row.kd_blok, row.no_urut, row.kd_jns_op, row.kd_kelurahan, row.kd_blok, row.no_urut, row.kd_jns_op])
row.thn_pajak_sppt])
def get_id(row):
return ''.join([get_nop(row), row.thn_pajak_sppt])
class Query: class Query:
...@@ -106,10 +113,17 @@ class Query: ...@@ -106,10 +113,17 @@ class Query:
class Inquiry(Query): class Inquiry(Query):
def __init__(self, invoice_id=None, persen_denda=2, invoice=None): def __init__(
self, invoice_id=None, persen_denda=2, invoice=None,
tgl_bayar=None):
Query.__init__(self, invoice_id, invoice) Query.__init__(self, invoice_id, invoice)
if not self.invoice:
return
self.persen_denda = persen_denda self.persen_denda = persen_denda
if self.invoice: if tgl_bayar:
self.tgl_bayar = tgl_bayar
else:
self.tgl_bayar = datetime.now()
self.hitung() self.hitung()
def get_kelurahan_model(self): def get_kelurahan_model(self):
...@@ -191,22 +205,18 @@ class Inquiry(Query): ...@@ -191,22 +205,18 @@ class Inquiry(Query):
tagihan = self.invoice.pbb_yg_harus_dibayar_sppt - sisa tagihan = self.invoice.pbb_yg_harus_dibayar_sppt - sisa
self.tagihan = round_up(tagihan) self.tagihan = round_up(tagihan)
def hitung_denda(self, tgl_bayar): def hitung_denda(self):
bln_tunggakan, denda = hitung_denda( self.bln_tunggakan, denda = hitung_denda(
self.tagihan, self.invoice.tgl_jatuh_tempo_sppt, self.persen_denda, self.tagihan, self.invoice.tgl_jatuh_tempo_sppt, self.persen_denda,
tgl_bayar) self.tgl_bayar.date())
self.denda = round_up(denda) self.denda = round_up(denda)
def hitung(self, tgl_bayar=None): def hitung(self):
if tgl_bayar is None:
tgl_bayar = date.today()
self.hitung_pokok() self.hitung_pokok()
self.hitung_denda(tgl_bayar) self.hitung_denda()
self.total = self.tagihan + self.denda self.total = self.tagihan + self.denda
def do_payment(self, bank_fields, nip_pencatat, tgl_bayar=None): def do_payment(self, bank_fields, nip_pencatat):
if not tgl_bayar:
tgl_bayar = datetime.now()
Payment = self.get_payment_model() Payment = self.get_payment_model()
bayar = self.invoice2payment() bayar = self.invoice2payment()
if bayar: if bayar:
...@@ -226,7 +236,7 @@ class Inquiry(Query): ...@@ -226,7 +236,7 @@ class Inquiry(Query):
bayar.thn_pajak_sppt = self.invoice.thn_pajak_sppt bayar.thn_pajak_sppt = self.invoice.thn_pajak_sppt
bayar.pembayaran_sppt_ke = ke bayar.pembayaran_sppt_ke = ke
bayar.tgl_rekam_byr_sppt = datetime.now() bayar.tgl_rekam_byr_sppt = datetime.now()
bayar.tgl_pembayaran_sppt = tgl_bayar bayar.tgl_pembayaran_sppt = self.tgl_bayar
bayar.jml_sppt_yg_dibayar = self.total bayar.jml_sppt_yg_dibayar = self.total
bayar.denda_sppt = self.denda bayar.denda_sppt = self.denda
bayar.nip_rekam_byr_sppt = nip_pencatat bayar.nip_rekam_byr_sppt = nip_pencatat
...@@ -234,7 +244,6 @@ class Inquiry(Query): ...@@ -234,7 +244,6 @@ class Inquiry(Query):
DBSession.add(bayar) DBSession.add(bayar)
self.invoice.status_pembayaran_sppt = '1' # Lunas self.invoice.status_pembayaran_sppt = '1' # Lunas
DBSession.add(self.invoice) DBSession.add(self.invoice)
DBSession.flush()
return bayar return bayar
def before_save(self, bayar): def before_save(self, bayar):
...@@ -252,7 +261,6 @@ class Reversal(Query): ...@@ -252,7 +261,6 @@ class Reversal(Query):
self.invoice.status_pembayaran_sppt = '0' self.invoice.status_pembayaran_sppt = '0'
DBSession.add(self.invoice) DBSession.add(self.invoice)
self.before_save() self.before_save()
DBSession.flush()
def before_save(self): def before_save(self):
pass pass
......
from time import time from time import time
from datetime import date from datetime import date
from opensipkd.hitung import round_up from opensipkd.hitung import (
round_up,
hitung_denda,
)
from sismiop.models.default import ( from sismiop.models.default import (
PenguranganPst, PenguranganPst,
PenguranganCovid, PenguranganCovid,
...@@ -24,45 +27,61 @@ class Inquiry(BaseInquiry): ...@@ -24,45 +27,61 @@ class Inquiry(BaseInquiry):
kd_kelurahan_pemohon=inv_id['Kelurahan'], kd_kelurahan_pemohon=inv_id['Kelurahan'],
kd_blok_pemohon=inv_id['Blok'], no_urut_pemohon=inv_id['Urut'], kd_blok_pemohon=inv_id['Blok'], no_urut_pemohon=inv_id['Urut'],
kd_jns_op_pemohon=inv_id['Jenis'], kd_jns_op_pemohon=inv_id['Jenis'],
thn_peng_pst=inv_id['Tahun']) thn_pelayanan=inv_id['Tahun'])
pst = q.first() pst = q.first()
return pst and pst.no_sk and pst.status_sk_peng_pst != '2' return pst and pst.no_sk and pst.status_sk_peng_pst != '2'
def hitung(self, tgl_bayar=None): # Override def hitung_denda(self): # Override
if tgl_bayar is None: self.bln_tunggakan, self.denda = hitung_denda(
tgl_bayar = date.today() self.tagihan, self.invoice.tgl_jatuh_tempo_sppt, self.persen_denda,
self.hitung_pokok() self.tgl_bayar.date())
self.hitung_denda(tgl_bayar)
def rumus_normal(self):
self.denda = round_up(self.denda)
self.total = self.tagihan + self.denda self.total = self.tagihan + self.denda
if self.total < 1:
return def rumus_pengurang_pokok(self):
# Pengurangan pokok if self.tgl_bayar.month == 4:
self.pengurang_pokok = self.pengurang_denda = 0
if self.invoice.thn_pajak_sppt == '2020':
if tgl_bayar.year == 2020 and not self.is_pst():
if tgl_bayar.month == 4:
pengurang = 0.15 pengurang = 0.15
elif tgl_bayar.month == 5: elif self.tgl_bayar.month == 5:
pengurang = 0.1 pengurang = 0.1
elif tgl_bayar.month == 4: elif self.tgl_bayar.month == 6:
pengurang = 0.5 pengurang = 0.05
self.pokok = self.tagihan
self.pengurang_pokok = round_up(pengurang * self.tagihan)
self.tagihan -= self.pengurang_pokok
self.denda = 0
elif self.invoice.thn_pajak_sppt < '2020':
if tgl_bayar.year == 2020:
if tgl_bayar.month in (4, 5, 6):
self.pengurang_denda = self.denda
self.denda = 0
else: else:
return return
self.total = self.tagihan + self.denda self.field_jml_sppt_yg_dibayar = self.tagihan
self.field_denda_sppt = self.denda = 0
self.pengurang_pokok = int(pengurang * self.tagihan)
self.total = self.tagihan = self.tagihan - self.pengurang_pokok
return True
def rumus_denda_sebagai_pengurang(self):
self.field_denda_sppt = self.pengurang_denda = self.denda = \
int(self.denda)
self.field_jml_sppt_yg_dibayar = self.tagihan + self.denda
self.denda = 0
self.total = self.tagihan
# self.tagihan, self.denda, dan self.total digunakan untuk ISO8583
def hitung(self): # Override
self.hitung_pokok()
self.hitung_denda()
self.rumus_normal()
if self.total < 1 or self.tgl_bayar.year != 2020:
return
self.pengurang_pokok = self.pengurang_denda = 0
if self.invoice.thn_pajak_sppt == '2020':
if not self.is_pst() and self.rumus_pengurang_pokok():
return
elif self.invoice.thn_pajak_sppt < '2020' and \
self.tgl_bayar.month in (4, 5, 6):
self.rumus_denda_sebagai_pengurang()
def before_save(self, bayar): # Override def before_save(self, bayar): # Override
if not self.pengurang_pokok and not self.pengurang_denda: if not self.pengurang_pokok and not self.pengurang_denda:
return return
bayar.denda_sppt = self.denda bayar.jml_sppt_yg_dibayar = self.field_jml_sppt_yg_dibayar
bayar.denda_sppt = self.field_denda_sppt
inv = self.invoice inv = self.invoice
pc = PenguranganCovid( pc = PenguranganCovid(
kd_propinsi=bayar.kd_propinsi, kd_dati2=bayar.kd_dati2, kd_propinsi=bayar.kd_propinsi, kd_dati2=bayar.kd_dati2,
...@@ -72,15 +91,20 @@ class Inquiry(BaseInquiry): ...@@ -72,15 +91,20 @@ class Inquiry(BaseInquiry):
kd_jns_op=bayar.kd_jns_op, thn_pajak_sppt=bayar.thn_pajak_sppt, kd_jns_op=bayar.kd_jns_op, thn_pajak_sppt=bayar.thn_pajak_sppt,
pembayaran_sppt_ke=bayar.pembayaran_sppt_ke) pembayaran_sppt_ke=bayar.pembayaran_sppt_ke)
if self.pengurang_pokok: if self.pengurang_pokok:
bayar.jml_sppt_yg_dibayar = self.pokok pc.bayar = self.pengurang_pokok
pc.pokok = self.pengurang_pokok
pc.denda = 0 pc.denda = 0
elif self.pengurang_denda: elif self.pengurang_denda:
pc.pokok = 0 pc.bayar = pc.denda = self.pengurang_denda
pc.denda = self.pengurang_denda
DBSession = get_db_session() DBSession = get_db_session()
DBSession.add(pc) DBSession.add(pc)
def get_pengurangan_covid(self, pay):
DBSession = get_db_session()
q = DBSession.query(PenguranganCovid)
q = self.get_filter(q)
q = q.filter_by(pembayaran_sppt_ke=pay.pembayaran_sppt_ke)
return q.first()
class Reversal(BaseReversal): class Reversal(BaseReversal):
def before_save(self): # Override def before_save(self): # Override
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!