Commit 11103d2d by Owo Sugiana

Penambahan Kota Tangerang yaitu modul tangkota

1 parent 128fcdb9
0.1.5 2020-07-01
----------------
- Tambah Kota Tangerang yaitu modul tangkota
- Discount tagihan pokok untuk Tangerang Selatan
- Penambahan tangsel_invisible_disc yang merupakan turunan dari tangsel
dimana discount tidak ditampilkan, konsekuensi dari spec yang telah
......
......@@ -36,6 +36,16 @@ def main(argv=sys.argv):
a.show()
def str2bool(v):
if isinstance(v, bool):
return v
if v.lower() in ('ya', 'yes', 'true', 't', 'y', '1'):
return True
elif v.lower() in ('tidak', 'no', 'false', 'f', 'n', '0'):
return False
raise argparse.ArgumentTypeError('Boolean value expected.')
def get_option_tangsel(argv):
default_count = 10
help_count = 'default {}'.format(default_count)
......@@ -43,7 +53,10 @@ def get_option_tangsel(argv):
pars.add_argument('conf')
pars.add_argument('--tahun')
pars.add_argument('--discount-penuh', action='store_true')
pars.add_argument('--faktor-pengurang', action='store_true')
pars.add_argument(
'--faktor-pengurang', type=str2bool, nargs='?', const=True, default=None)
pars.add_argument('--min-nominal', type=int)
pars.add_argument('--max-nominal', type=int)
pars.add_argument(
'--count', type=int, default=default_count, help=help_count)
return pars.parse_args(argv)
......
......@@ -270,6 +270,16 @@ class Inquiry(Query):
DBSession.add(self.invoice)
return bayar
def set_faktor_pengurang_sppt(self):
if not self.discount_pokok:
return
not_null(self.invoice)
self.invoice.pbb_yg_harus_dibayar_sppt = \
self.invoice.pbb_terhutang_sppt - \
self.invoice.faktor_pengurang_sppt - \
self.discount_pokok
self.invoice.faktor_pengurang_sppt += self.discount_pokok
def before_save(self, bayar):
pass
......@@ -292,6 +302,23 @@ class Reversal(Query):
def before_save(self):
pass
def set_faktor_pengurang_sppt(self):
if not self.payment.discount_pokok:
return
not_null(self.invoice)
self.invoice.pbb_yg_harus_dibayar_sppt = \
self.invoice.pbb_terhutang_sppt - \
self.invoice.faktor_pengurang_sppt + \
self.payment.discount_pokok
self.invoice.faktor_pengurang_sppt -= self.payment.discount_pokok
def not_null(invoice):
if invoice.pbb_terhutang_sppt is None:
invoice.pbb_terhutang_sppt = 0
if invoice.faktor_pengurang_sppt is None:
invoice.faktor_pengurang_sppt = 0
class AvailableInvoice(Query):
def __init__(self, persen_denda=2, count=10, tahun=None):
......@@ -338,7 +365,7 @@ class AvailableInvoice(Query):
continue
no += 1
msg = self.get_msg(inq)
msg = '#{} {}'.format(str(no).zfill(2), msg)
msg = '#{}/{} {}'.format(str(no).zfill(2), self.count, msg)
print(msg)
if no == self.count:
break
......
from datetime import date
from ..default import Inquiry as BaseInquiry
from ..tangsel import (
Reversal,
AvailableInvoice as BaseAvailableInvoice,
AvailableInvoiceTangsel as BaseAvailableInvoiceTangsel,
)
TAHUN_PAJAK_DISC_POKOK = ['2020']
PERIODE_DISC_POKOK = {
2020: {
7: [
(100000, 1),
(500000, 0.2),
(2000000, 0.15),
(5000000, 0.1),
(None, 0.05),
],
8: [
(100000, 1),
(500000, 0.15),
(2000000, 0.1),
(5000000, 0.05),
(None, 0.03),
],
9: [
(100000, 1),
(500000, 0.1),
(2000000, 0.05),
(5000000, 0.03),
(None, 0),
],
},
}
AKHIR_DISC_DENDA = date(2020, 7, 31)
class Inquiry(BaseInquiry):
def hitung_discount(self): # Override
self.discount_denda = self.hitung_discount_denda()
self.discount_pokok = self.hitung_discount_pokok()
self.discount = self.discount_denda + self.discount_pokok
def hitung_discount_denda(self):
self.denda_sblm_diskon = self.denda
if self.tgl_bayar.date() > AKHIR_DISC_DENDA:
return 0
return self.denda
def hitung_discount_pokok(self):
faktor_pengurang = self.invoice.faktor_pengurang_sppt or 0
if faktor_pengurang > 0:
return 0
if self.invoice.thn_pajak_sppt not in TAHUN_PAJAK_DISC_POKOK:
return 0
if self.tgl_bayar.year not in PERIODE_DISC_POKOK:
return 0
bulan_disc = PERIODE_DISC_POKOK[self.tgl_bayar.year]
if self.tgl_bayar.month not in bulan_disc:
return 0
disc_list = bulan_disc[self.tgl_bayar.month]
for max_tagihan, disc in disc_list:
#print('max_tagihan {}, disc {}'.format(max_tagihan, disc))
if max_tagihan is None:
break
if self.invoice.pbb_yg_harus_dibayar_sppt <= max_tagihan:
break
return int(disc * self.tagihan)
def before_save(self, payment): # Override
payment.denda_sblm_diskon = self.denda_sblm_diskon
payment.discount_pokok = self.discount_pokok
self.set_faktor_pengurang_sppt()
class AvailableInvoice(BaseAvailableInvoice):
def get_inquiry_class(self):
return Inquiry
class AvailableInvoiceTangsel(BaseAvailableInvoiceTangsel):
def get_inquiry_class(self):
return Inquiry
from sqlalchemy import (
Column,
Float,
)
from sismiop.models.default import PembayaranSppt as BasePembayaranSppt
class PembayaranSppt(BasePembayaranSppt):
__table_args__ = dict(extend_existing=True)
discount_pokok = Column(Float)
from datetime import date
from sqlalchemy import func
from sqlalchemy import (
func,
or_,
)
from sqlalchemy.orm import aliased
from opensipkd.hitung import round_up
from ..base import (
......@@ -30,13 +33,6 @@ for i in range(THN_AWAL, THN_AKHIR+1):
THN_DISC.append(str(i))
def not_null(invoice):
if invoice.pbb_terhutang_sppt is None:
invoice.pbb_terhutang_sppt = 0
if invoice.faktor_pengurang_sppt is None:
invoice.faktor_pengurang_sppt = 0
class Inquiry(BaseInquiry):
def get_payment_model(self): # Override
return PembayaranSppt
......@@ -115,33 +111,13 @@ class Inquiry(BaseInquiry):
self.set_faktor_pengurang_sppt()
def set_faktor_pengurang_sppt(self):
if not self.discount_pokok:
return
not_null(self.invoice)
self.invoice.pbb_yg_harus_dibayar_sppt = \
self.invoice.pbb_terhutang_sppt - \
self.invoice.faktor_pengurang_sppt - \
self.discount_pokok
self.invoice.faktor_pengurang_sppt += self.discount_pokok
class Reversal(BaseReversal):
def get_payment_model(self): # Override
return PembayaranSppt
def before_save(self):
if not self.payment.discount_pokok:
return
not_null(self.invoice)
self.invoice.pbb_yg_harus_dibayar_sppt = \
self.invoice.pbb_terhutang_sppt - \
self.invoice.faktor_pengurang_sppt + \
self.payment.discount_pokok
self.invoice.faktor_pengurang_sppt -= self.payment.discount_pokok
self.set_faktor_pengurang_sppt()
self.payment.discount_pokok = 0
......@@ -204,6 +180,17 @@ class AvailableInvoiceTangsel(AvailableInvoice):
Sppt.thn_pajak_sppt < str(THN_AWAL),
subq1.exists(),
~subq2.exists())
if self.option.faktor_pengurang is not None:
if self.option.faktor_pengurang:
q = q.filter(Sppt.faktor_pengurang_sppt > 0)
else:
q = q.filter(or_(
Sppt.faktor_pengurang_sppt is None,
Sppt.faktor_pengurang_sppt <= 0))
if self.option.min_nominal:
q = q.filter(
Sppt.pbb_yg_harus_dibayar_sppt >= self.option.min_nominal)
if self.option.max_nominal:
q = q.filter(
Sppt.pbb_yg_harus_dibayar_sppt <= self.option.max_nominal)
return q
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!