Commit 547db4ef by Owo Sugiana

Tambah tabel tempat_pembayaran

1 parent 3f365f1c
......@@ -11,6 +11,7 @@ from .pembayaran_sppt import PembayaranSpptMixin
from .kelurahan import KelurahanMixin
from .kecamatan import KecamatanMixin
from .propinsi import PropinsiMixin
from .tempat_pembayaran import TempatPembayaranMixin
Base = declarative_base()
......@@ -40,6 +41,9 @@ class Propinsi(Base, PropinsiMixin):
pass
class TempatPembayaran(Base, TempatPembayaranMixin):
pass
class PenguranganCovid(Base):
__tablename__ = 'pengurangan_covid'
kd_propinsi = Column(String(2), primary_key=True)
......@@ -51,7 +55,7 @@ class PenguranganCovid(Base):
kd_jns_op = Column(String(1), primary_key=True)
thn_pajak_sppt = Column(String(4), 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)
#__table_args__ = (
# 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,10 +51,32 @@ def show(inq):
show_val('Nama Wajib Pajak', inq.get_nama_wp())
show_rp('Tagihan', inq.tagihan)
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_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):
......@@ -96,9 +118,7 @@ def main(argv=sys.argv):
kd_tp=conf.get('main', 'kd_tp'))
nip = conf.get('main', 'nip_pencatat')
pay = inq.do_payment(tp, nip, tgl_bayar)
print(
'Berhasil dibayar pada urutan ke-{}'.format(
pay.pembayaran_sppt_ke))
show_payment(module_name, inq, pay)
if option.reversal:
rev = Reversal(invoice_id)
pay = rev.payment
......
......@@ -18,7 +18,8 @@ DBSession = None
locale.setlocale(locale.LC_ALL, 'id_ID.utf8')
INVOICE_ID = [
# Nomor Objek Pajak
NOP = [
('Propinsi', 2, 'N'),
('Kabupaten', 2, 'N'),
('Kecamatan', 3, 'N'),
......@@ -26,6 +27,9 @@ INVOICE_ID = [
('Blok', 3, 'N'),
('Urut', 4, 'N'),
('Jenis', 1, 'N'),
]
INVOICE_ID = NOP + [
('Tahun', 4, 'N'),
]
......@@ -38,11 +42,14 @@ def thousand(n):
return locale.format('%0.f', n, True)
def get_id(row):
def get_nop(row):
return ''.join(
[row.kd_propinsi, row.kd_dati2, row.kd_kecamatan,
row.kd_kelurahan, row.kd_blok, row.no_urut, row.kd_jns_op,
row.thn_pajak_sppt])
row.kd_kelurahan, row.kd_blok, row.no_urut, row.kd_jns_op])
def get_id(row):
return ''.join([get_nop(row), row.thn_pajak_sppt])
class Query:
......@@ -106,11 +113,18 @@ class 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)
if not self.invoice:
return
self.persen_denda = persen_denda
if self.invoice:
self.hitung()
if tgl_bayar:
self.tgl_bayar = tgl_bayar
else:
self.tgl_bayar = datetime.now()
self.hitung()
def get_kelurahan_model(self):
pass
......@@ -191,22 +205,18 @@ class Inquiry(Query):
tagihan = self.invoice.pbb_yg_harus_dibayar_sppt - sisa
self.tagihan = round_up(tagihan)
def hitung_denda(self, tgl_bayar):
bln_tunggakan, denda = hitung_denda(
def hitung_denda(self):
self.bln_tunggakan, denda = hitung_denda(
self.tagihan, self.invoice.tgl_jatuh_tempo_sppt, self.persen_denda,
tgl_bayar)
self.tgl_bayar.date())
self.denda = round_up(denda)
def hitung(self, tgl_bayar=None):
if tgl_bayar is None:
tgl_bayar = date.today()
def hitung(self):
self.hitung_pokok()
self.hitung_denda(tgl_bayar)
self.hitung_denda()
self.total = self.tagihan + self.denda
def do_payment(self, bank_fields, nip_pencatat, tgl_bayar=None):
if not tgl_bayar:
tgl_bayar = datetime.now()
def do_payment(self, bank_fields, nip_pencatat):
Payment = self.get_payment_model()
bayar = self.invoice2payment()
if bayar:
......@@ -226,7 +236,7 @@ class Inquiry(Query):
bayar.thn_pajak_sppt = self.invoice.thn_pajak_sppt
bayar.pembayaran_sppt_ke = ke
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.denda_sppt = self.denda
bayar.nip_rekam_byr_sppt = nip_pencatat
......@@ -234,7 +244,6 @@ class Inquiry(Query):
DBSession.add(bayar)
self.invoice.status_pembayaran_sppt = '1' # Lunas
DBSession.add(self.invoice)
DBSession.flush()
return bayar
def before_save(self, bayar):
......@@ -252,7 +261,6 @@ class Reversal(Query):
self.invoice.status_pembayaran_sppt = '0'
DBSession.add(self.invoice)
self.before_save()
DBSession.flush()
def before_save(self):
pass
......
from time import time
from datetime import date
from opensipkd.hitung import round_up
from opensipkd.hitung import (
round_up,
hitung_denda,
)
from sismiop.models.default import (
PenguranganPst,
PenguranganCovid,
......@@ -24,45 +27,61 @@ class Inquiry(BaseInquiry):
kd_kelurahan_pemohon=inv_id['Kelurahan'],
kd_blok_pemohon=inv_id['Blok'], no_urut_pemohon=inv_id['Urut'],
kd_jns_op_pemohon=inv_id['Jenis'],
thn_peng_pst=inv_id['Tahun'])
thn_pelayanan=inv_id['Tahun'])
pst = q.first()
return pst and pst.no_sk and pst.status_sk_peng_pst != '2'
def hitung(self, tgl_bayar=None): # Override
if tgl_bayar is None:
tgl_bayar = date.today()
self.hitung_pokok()
self.hitung_denda(tgl_bayar)
def hitung_denda(self): # Override
self.bln_tunggakan, self.denda = hitung_denda(
self.tagihan, self.invoice.tgl_jatuh_tempo_sppt, self.persen_denda,
self.tgl_bayar.date())
def rumus_normal(self):
self.denda = round_up(self.denda)
self.total = self.tagihan + self.denda
if self.total < 1:
def rumus_pengurang_pokok(self):
if self.tgl_bayar.month == 4:
pengurang = 0.15
elif self.tgl_bayar.month == 5:
pengurang = 0.1
elif self.tgl_bayar.month == 6:
pengurang = 0.05
else:
return
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
# Pengurangan pokok
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
elif tgl_bayar.month == 5:
pengurang = 0.1
elif tgl_bayar.month == 4:
pengurang = 0.5
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:
return
self.total = self.tagihan + self.denda
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
if not self.pengurang_pokok and not self.pengurang_denda:
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
pc = PenguranganCovid(
kd_propinsi=bayar.kd_propinsi, kd_dati2=bayar.kd_dati2,
......@@ -72,15 +91,20 @@ class Inquiry(BaseInquiry):
kd_jns_op=bayar.kd_jns_op, thn_pajak_sppt=bayar.thn_pajak_sppt,
pembayaran_sppt_ke=bayar.pembayaran_sppt_ke)
if self.pengurang_pokok:
bayar.jml_sppt_yg_dibayar = self.pokok
pc.pokok = self.pengurang_pokok
pc.bayar = self.pengurang_pokok
pc.denda = 0
elif self.pengurang_denda:
pc.pokok = 0
pc.denda = self.pengurang_denda
pc.bayar = pc.denda = self.pengurang_denda
DBSession = get_db_session()
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):
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!