Commit eef8497f by Owo Sugiana

Perubahan rumus tangsel

1 parent b89a16d4
0.1.4 2020-06-23
----------------
- Penambahan Tangerang Selatan
0.1.3 2020-05-15
----------------
- Tambah Kabupaten Tasikmalaya
......
......@@ -38,6 +38,7 @@ setup(
'console_scripts': [
'pbb_init_db = sismiop.scripts.init_db:main',
'pbb_available_invoice = sismiop.scripts.available_invoice:main',
'pbb_available_invoice_tangsel = sismiop.scripts.available_invoice:tangsel',
'pbb_inquiry = sismiop.scripts.inquiry:main',
]
}
......
import sys
from configparser import ConfigParser
from optparse import OptionParser
from argparse import ArgumentParser
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
import sismiop.services.base
......@@ -9,17 +9,18 @@ import sismiop.services.base
def get_option(argv):
default_count = 10
help_count = 'default {}'.format(default_count)
pars = OptionParser()
pars.add_option('', '--tahun')
pars.add_option(
'', '--count', type=int, default=default_count, help=help_count)
pars = ArgumentParser()
pars.add_argument('conf')
pars.add_argument('--tahun')
pars.add_argument(
'--count', type=int, default=default_count, help=help_count)
return pars.parse_args(argv)
def main(argv=sys.argv):
option, remain = get_option(argv[1:])
option = get_option(argv[1:])
count = int(option.count)
conf_file = remain[0]
conf_file = option.conf
conf = ConfigParser()
conf.read(conf_file)
module_name = conf.get('main', 'module')
......@@ -33,3 +34,33 @@ def main(argv=sys.argv):
sismiop.services.base.DBSession = session_factory()
a = AvailableInvoice(persen_denda, count, option.tahun)
a.show()
def get_option_tangsel(argv):
default_count = 10
help_count = 'default {}'.format(default_count)
pars = ArgumentParser()
pars.add_argument('conf')
pars.add_argument('--tahun')
pars.add_argument('--discount-penuh', action='store_true')
pars.add_argument(
'--count', type=int, default=default_count, help=help_count)
return pars.parse_args(argv)
def tangsel(argv=sys.argv):
option = get_option_tangsel(argv[1:])
conf_file = option.conf
conf = ConfigParser()
conf.read(conf_file)
module_name = conf.get('main', 'module')
module = __import__('sismiop.services.' + module_name)
sub_module = getattr(module.services, module_name)
AvailableInvoice = sub_module.AvailableInvoiceTangsel
db_url = conf.get('main', 'db_url')
persen_denda = conf.getfloat('main', 'persen_denda')
engine = create_engine(db_url)
session_factory = sessionmaker(bind=engine)
sismiop.services.base.DBSession = session_factory()
a = AvailableInvoice(persen_denda, option)
a.show()
......@@ -295,6 +295,9 @@ class AvailableInvoice(Query):
def get_inquiry_class(self):
return Inquiry
def get_filter(self, q):
return q
def show(self):
Invoice = self.get_invoice_model()
Payment = self.get_payment_model()
......@@ -318,6 +321,7 @@ class AvailableInvoice(Query):
q = DBSession.query(Invoice).filter_by(status_pembayaran_sppt='0')
if self.tahun:
q = q.filter_by(thn_pajak_sppt=self.tahun)
q = self.get_filter(q)
q = q.offset(offset).limit(1)
inv = q.first()
if not inv:
......
from datetime import date
from ..base import thousand
from sqlalchemy.orm import aliased
from ..base import (
thousand,
get_db_session,
)
from ..default import (
Inquiry as BaseInquiry,
Reversal,
......@@ -8,19 +12,34 @@ from ..default import (
AKHIR_DISC = date(2020, 12, 31)
THN_AWAL = 2014
THN_AKHIR = 2019
THN_DISC = []
for i in range(2014, 2020): # 2014 - 2019
for i in range(THN_AWAL, THN_AKHIR+1):
THN_DISC.append(str(i))
class Inquiry(BaseInquiry):
def belum_lunas_di_periode_discount(self):
DBSession = get_db_session()
Sppt = self.get_invoice_model()
q = DBSession.query(Sppt)
q = self.get_filter_op(q)
q = q.filter(
Sppt.thn_pajak_sppt.in_(THN_DISC),
Sppt.status_pembayaran_sppt != '1')
return q.first()
def hitung_denda(self): # Override
BaseInquiry.hitung_denda(self)
self.denda_sblm_diskon = self.denda
if self.tgl_bayar.date() > AKHIR_DISC:
return
if self.invoice.thn_pajak_sppt not in THN_DISC:
if self.invoice.thn_pajak_sppt < str(THN_AWAL):
if self.belum_lunas_di_periode_discount():
return
self.denda = 0
elif self.invoice.thn_pajak_sppt in THN_DISC:
self.denda -= int(0.5 * self.denda)
def before_save(self, bayar): # Override
......@@ -37,3 +56,40 @@ class AvailableInvoice(BaseAvailableInvoice):
return s
return '{}, Denda Sebelum Discount Rp {}'.format(
s, thousand(inq.denda_sblm_diskon))
class AvailableInvoiceTangsel(AvailableInvoice):
def __init__(self, persen_denda, option):
AvailableInvoice.__init__(self, persen_denda, option.count, option.tahun)
self.option = option
def get_filter(self, q): # Override
if self.option.discount_penuh:
DBSession = get_db_session()
Sppt = self.get_invoice_model()
Sppt1 = aliased(Sppt)
Sppt2 = aliased(Sppt)
subq1 = DBSession.query(Sppt1).filter(
Sppt1.kd_propinsi==Sppt.kd_propinsi,
Sppt1.kd_dati2==Sppt.kd_dati2,
Sppt1.kd_kecamatan==Sppt.kd_kecamatan,
Sppt1.kd_kelurahan==Sppt.kd_kelurahan,
Sppt1.kd_blok==Sppt.kd_blok,
Sppt1.no_urut==Sppt.no_urut,
Sppt1.kd_jns_op==Sppt.kd_jns_op,
Sppt1.thn_pajak_sppt.in_(THN_DISC))
subq2 = DBSession.query(Sppt2).filter(
Sppt2.kd_propinsi==Sppt.kd_propinsi,
Sppt2.kd_dati2==Sppt.kd_dati2,
Sppt2.kd_kecamatan==Sppt.kd_kecamatan,
Sppt2.kd_kelurahan==Sppt.kd_kelurahan,
Sppt2.kd_blok==Sppt.kd_blok,
Sppt2.no_urut==Sppt.no_urut,
Sppt2.kd_jns_op==Sppt.kd_jns_op,
Sppt2.thn_pajak_sppt.in_(THN_DISC),
Sppt2.status_pembayaran_sppt != '1')
return q.filter(
Sppt.thn_pajak_sppt < str(THN_AWAL),
subq1.exists(),
~subq2.exists())
return q
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!