Commit 1aea8b9b by Owo Sugiana

Penambahan modul serang_kab

1 parent a0c0a2c7
......@@ -2,6 +2,7 @@
----------------
- Perubahan rumus discount pokok dan discount denda pada modul tangsel sesuai
Peraturan Walikota Tangerang Selatan Nomor 34 Tahun 2020
- Penambahan modul serang_kab
0.1.8 2020-08-26
----------------
......
......@@ -20,7 +20,7 @@ def get_option(argv):
def main(argv=sys.argv):
option = get_option(argv[1:])
invoice_id = option.invoice_id
conf_file = option.conf
conf_file = option.conf
conf = ConfigParser()
conf.read(conf_file)
module_name = conf.get('main', 'module')
......
......@@ -19,7 +19,8 @@ requires = [
'transaction',
'zope.sqlalchemy',
'psycopg2-binary',
'opensipkd-hitung @ git+https://git.opensipkd.com/sugiana/opensipkd-hitung',
'opensipkd-hitung @ '
'git+https://git.opensipkd.com/sugiana/opensipkd-hitung',
]
......@@ -38,7 +39,8 @@ 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_available_invoice_tangsel = '
'sismiop.scripts.available_invoice:tangsel',
'pbb_inquiry = sismiop.scripts.inquiry:main',
]
}
......
......@@ -44,44 +44,45 @@ class Propinsi(Base, PropinsiMixin):
class TempatPembayaran(Base, TempatPembayaranMixin):
pass
class PenguranganCovid(Base):
__tablename__ = 'pengurangan_covid'
kd_propinsi = Column(String(2), primary_key=True)
kd_dati2 = Column(String(2), primary_key=True)
kd_kecamatan = Column(String(3), primary_key=True)
kd_kelurahan = Column(String(3), primary_key=True)
kd_blok = Column(String(3), primary_key=True)
no_urut = Column(String(4), primary_key=True)
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)
kd_dati2 = Column(String(2), primary_key=True)
kd_kecamatan = Column(String(3), primary_key=True)
kd_kelurahan = Column(String(3), primary_key=True)
kd_blok = Column(String(3), primary_key=True)
no_urut = Column(String(4), primary_key=True)
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)
bayar = Column(Float, nullable=False)
denda = Column(Float, nullable=False)
#__table_args__ = (
# ForeignKeyConstraint(
# [kd_propinsi, kd_dati2, kd_kecamatan, kd_kelurahan, kd_blok,
# no_urut, kd_jns_op, thn_pajak_sppt, pembayaran_sppt_ke],
# [PembayaranSppt.kd_propinsi, PembayaranSppt.kd_dati2,
# PembayaranSppt.kd_kecamatan, PembayaranSppt.kd_kelurahan,
# PembayaranSppt.kd_blok, PembayaranSppt.no_urut,
# PembayaranSppt.kd_jns_op, PembayaranSppt.thn_pajak_sppt,
# PembayaranSppt.pembayaran_sppt_ke]),
# )
# __table_args__ = (
# ForeignKeyConstraint(
# [kd_propinsi, kd_dati2, kd_kecamatan, kd_kelurahan, kd_blok,
# no_urut, kd_jns_op, thn_pajak_sppt, pembayaran_sppt_ke],
# [PembayaranSppt.kd_propinsi, PembayaranSppt.kd_dati2,
# PembayaranSppt.kd_kecamatan, PembayaranSppt.kd_kelurahan,
# PembayaranSppt.kd_blok, PembayaranSppt.no_urut,
# PembayaranSppt.kd_jns_op, PembayaranSppt.thn_pajak_sppt,
# PembayaranSppt.pembayaran_sppt_ke]),
# )
class PenguranganPst(Base):
__tablename__ = 'pengurangan_pst'
kd_kanwil = Column(String(2), primary_key=True)
kd_kantor = Column(String(2), primary_key=True)
thn_pelayanan = Column(String(4), primary_key=True)
bundel_pelayanan = Column(String(4), primary_key=True)
no_urut_pelayanan = Column(String(3), primary_key=True)
kd_propinsi_pemohon = Column(String(2), primary_key=True)
kd_dati2_pemohon = Column(String(2), primary_key=True)
kd_kecamatan_pemohon = Column(String(3), primary_key=True)
kd_kelurahan_pemohon = Column(String(3), primary_key=True)
kd_blok_pemohon = Column(String(3), primary_key=True)
no_urut_pemohon = Column(String(4), primary_key=True)
kd_kantor = Column(String(2), primary_key=True)
thn_pelayanan = Column(String(4), primary_key=True)
bundel_pelayanan = Column(String(4), primary_key=True)
no_urut_pelayanan = Column(String(3), primary_key=True)
kd_propinsi_pemohon = Column(String(2), primary_key=True)
kd_dati2_pemohon = Column(String(2), primary_key=True)
kd_kecamatan_pemohon = Column(String(3), primary_key=True)
kd_kelurahan_pemohon = Column(String(3), primary_key=True)
kd_blok_pemohon = Column(String(3), primary_key=True)
no_urut_pemohon = Column(String(4), primary_key=True)
kd_jns_op_pemohon = Column(String(1), primary_key=True)
thn_peng_pst = Column(String(4), nullable=False)
jns_sk = Column(String(1), nullable=False)
......
......@@ -21,4 +21,3 @@ class KabupatenMixin:
@declared_attr
def nm_dati2(self):
return Column(String(30))
......@@ -25,4 +25,3 @@ class KecamatanMixin:
@declared_attr
def nm_kecamatan(self):
return Column(String(30))
......@@ -42,4 +42,3 @@ class KelurahanMixin:
@declared_attr
def kd_pos_kelurahan(self):
return Column(String(5))
......@@ -9,7 +9,7 @@ from sqlalchemy import (
from sqlalchemy.ext.declarative import declared_attr
class ObjekPajakMixin:
class BaseObjekPajakMixin:
@declared_attr
def __tablename__(self):
return 'dat_objek_pajak'
......@@ -107,10 +107,6 @@ class ObjekPajakMixin:
return Column(Date)
@declared_attr
def nip_pendata(self):
return Column(String(18))
@declared_attr
def tgl_pemeriksaan_op(self):
return Column(Date)
......@@ -126,3 +122,8 @@ class ObjekPajakMixin:
def nip_perekam_op(self):
return Column(String(18))
class ObjekPajakMixin(BaseObjekPajakMixin):
@declared_attr
def nip_pendata(self):
return Column(String(18))
......@@ -51,17 +51,19 @@ class BasePembayaranSpptMixin:
return Column(Integer, primary_key=True)
@declared_attr
def kd_kanwil(self):
def kd_tp(self):
return Column(String(2), primary_key=True)
@declared_attr
def kd_kantor(self):
return Column(String(2), primary_key=True)
def tgl_pembayaran_sppt(self):
return Column(DateTime)
@declared_attr
def kd_tp(self):
return Column(String(2), primary_key=True)
def tgl_rekam_byr_sppt(self):
return Column(DateTime)
class PembayaranSpptMixin(BasePembayaranSpptMixin):
@declared_attr
def denda_sppt(self):
return Column(BigInteger)
......@@ -71,20 +73,17 @@ class BasePembayaranSpptMixin:
return Column(BigInteger)
@declared_attr
def tgl_pembayaran_sppt(self):
return Column(DateTime)
@declared_attr
def tgl_rekam_byr_sppt(self):
return Column(DateTime)
def discount(self):
return Column(BigInteger)
@declared_attr
def nip_rekam_byr_sppt(self):
return Column(String(18))
class PembayaranSpptMixin(BasePembayaranSpptMixin):
@declared_attr
def discount(self):
return Column(BigInteger)
def kd_kanwil(self):
return Column(String(2), primary_key=True)
@declared_attr
def kd_kantor(self):
return Column(String(2), primary_key=True)
......@@ -17,4 +17,3 @@ class PropinsiMixin:
@declared_attr
def nm_propinsi(self):
return Column(String(30))
from sqlalchemy import (
Column,
Float,
String,
)
from sqlalchemy.ext.declarative import declarative_base
from .objek_pajak import BaseObjekPajakMixin
from .sppt import BaseSpptMixin
from .pembayaran_sppt import BasePembayaranSpptMixin
from .kelurahan import KelurahanMixin
from .kecamatan import KecamatanMixin
from .propinsi import PropinsiMixin
from .tempat_pembayaran import TempatPembayaranMixin
Base = declarative_base()
class ObjekPajak(Base, BaseObjekPajakMixin):
__table_args__ = dict(schema='iprotaxpbb')
class Sppt(Base, BaseSpptMixin):
__table_args__ = dict(schema='iprotaxpbb')
pbb_yg_hrs_dibayar_sppt = Column(Float)
class PembayaranSppt(Base, BasePembayaranSpptMixin):
__table_args__ = dict(schema='iprotaxpbb')
jml_denda_sppt = Column(Float)
jml_pbb_yg_dibayar = Column(Float, nullable=False)
user_bank_rekam = Column(String(50), nullable=False)
kd_bank_tunggal = Column(String(2), nullable=False)
kd_bank_persepsi = Column(String(2), nullable=False)
no_transaksi_byr_sppt = Column(String(20))
no_transaksi_byr_sppt_bank = Column(String(35))
kd_sumber_data = Column(String(1), nullable=False)
class Kelurahan(Base, KelurahanMixin):
__table_args__ = dict(schema='iprotaxref')
class Kecamatan(Base, KecamatanMixin):
__table_args__ = dict(schema='iprotaxref')
class Propinsi(Base, PropinsiMixin):
__table_args__ = dict(schema='iprotaxref')
class TempatPembayaran(Base, TempatPembayaranMixin):
__table_args__ = dict(schema='iprotaxpbb')
......@@ -9,7 +9,7 @@ from sqlalchemy import (
from sqlalchemy.ext.declarative import declared_attr
class SpptMixin:
class BaseSpptMixin:
@declared_attr
def __tablename__(self):
return 'sppt'
......@@ -50,22 +50,6 @@ class SpptMixin:
def siklus_sppt(self):
return Column(Integer)
#@declared_attr
#def kd_kanwil_bank(self):
# return Column(String(2))
#@declared_attr
#def kd_kppbb_bank(self):
# return Column(String(2))
#@declared_attr
#def kd_bank_tunggal(self):
# return Column(String(2))
#@declared_attr
#def kd_bank_persepsi(self):
# return Column(String(2))
@declared_attr
def kd_tp(self):
return Column(String(2))
......@@ -154,10 +138,6 @@ class SpptMixin:
def njoptkp_sppt(self):
return Column(Integer)
#@declared_attr
#def njkp_sppt(self):
# return Column(Integer)
@declared_attr
def pbb_terhutang_sppt(self):
return Column(Float)
......@@ -167,10 +147,6 @@ class SpptMixin:
return Column(Float)
@declared_attr
def pbb_yg_harus_dibayar_sppt(self):
return Column(Float)
@declared_attr
def status_pembayaran_sppt(self):
return Column(String(1))
......@@ -194,10 +170,8 @@ class SpptMixin:
def nip_pencetak_sppt(self):
return Column(String(18))
@declared_attr
def kd_kanwil(self):
return Column(String(2))
class SpptMixin(BaseSpptMixin):
@declared_attr
def kd_kantor(self):
return Column(String(2))
def pbb_yg_harus_dibayar_sppt(self):
return Column(Float)
......@@ -57,4 +57,3 @@ class SubjekPajakMixin:
@declared_attr
def status_pekerjaan_wp(self):
return Column(String(1))
from sqlalchemy import (
Column,
Integer,
String,
Float,
)
from sqlalchemy.ext.declarative import declarative_base
from .objek_pajak import ObjekPajakMixin
from .sppt import SpptMixin
......@@ -26,7 +20,11 @@ class Sppt(Base, SpptMixin):
class PembayaranSppt(Base, BasePembayaranSpptMixin):
pass
denda_sppt = Column(BigInteger)
jml_sppt_yg_dibayar = Column(BigInteger)
nip_rekam_byr_sppt = Column(String(18))
kd_kanwil = Column(String(2))
kd_kantor = Column(String(2))
class Kelurahan(Base, KelurahanMixin):
......
......@@ -20,7 +20,7 @@ def get_option(argv):
def main(argv=sys.argv):
option = get_option(argv[1:])
count = int(option.count)
conf_file = option.conf
conf_file = option.conf
conf = ConfigParser()
conf.read(conf_file)
module_name = conf.get('main', 'module')
......@@ -38,7 +38,7 @@ def main(argv=sys.argv):
def str2bool(v):
if isinstance(v, bool):
return v
return v
if v.lower() in ('ya', 'yes', 'true', 't', 'y', '1'):
return True
elif v.lower() in ('tidak', 'no', 'false', 'f', 'n', '0'):
......@@ -54,7 +54,8 @@ def get_option_tangsel(argv):
pars.add_argument('--tahun')
pars.add_argument('--discount-penuh', action='store_true')
pars.add_argument(
'--faktor-pengurang', type=str2bool, nargs='?', const=True, default=None)
'--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(
......@@ -64,7 +65,7 @@ def get_option_tangsel(argv):
def tangsel(argv=sys.argv):
option = get_option_tangsel(argv[1:])
conf_file = option.conf
conf_file = option.conf
conf = ConfigParser()
conf.read(conf_file)
module_name = conf.get('main', 'module')
......
......@@ -67,7 +67,7 @@ def show(inq):
show_rp('Total Discount', inq.discount)
show_rp('Total Bayar Sebelumnya', inq.total_bayar)
show_rp('Total Tagihan', inq.total)
show_field(inq.invoice, 'status_pembayaran_sppt')
show_field(inq.invoice, 'status_pembayaran_sppt')
show_field(inq.invoice, 'pbb_yg_harus_dibayar_sppt')
show_field(inq.invoice, 'pbb_terhutang_sppt')
show_field(inq.invoice, 'faktor_pengurang_sppt')
......@@ -125,7 +125,7 @@ def main(argv=sys.argv):
tgl_bayar = date_from_str(option.tgl_bayar)
else:
tgl_bayar = None
conf_file = option.conf
conf_file = option.conf
conf = ConfigParser()
conf.read(conf_file)
module_name = conf.get('main', 'module')
......@@ -152,10 +152,15 @@ def main(argv=sys.argv):
if not inq.is_available():
print('Tagihan tidak diperkenankan dibayar melalui jalur ini.')
return
tp = dict(
kd_kanwil=conf.get('main', 'kd_kanwil'),
kd_kantor=conf.get('main', 'kd_kantor'),
kd_tp=conf.get('main', 'kd_tp'))
tp = dict(kd_tp=conf.get('main', 'kd_tp'))
if conf.has_option('main', 'kd_kanwil'):
tp.update(dict(
kd_kanwil=conf.get('main', 'kd_kanwil'),
kd_kantor=conf.get('main', 'kd_kantor')))
else:
tp.update(dict(
kd_bank_tunggal=conf.get('main', 'kd_bank_tunggal'),
kd_bank_persepsi=conf.get('main', 'kd_bank_persepsi')))
nip = conf.get('main', 'nip_pencatat')
pay = inq.do_payment(tp, nip)
show_payment(module_name, inq, pay)
......@@ -176,11 +181,10 @@ def main(argv=sys.argv):
DBSession.add(inq.invoice)
print('Sudah diperbarui, silakan inquiry lagi.')
if inq.invoice.status_pembayaran_sppt == '1':
print('Field status_pembayaran_sppt sudah 1, '\
print(
'Field status_pembayaran_sppt sudah 1, '
'tidak perlu diperbarui lagi')
else:
print('Field status_pembayaran_sppt harus 0')
else:
print('Total Tagihan harus 0')
......@@ -125,7 +125,7 @@ class Query:
def set_faktor_pengurang_sppt(self, penambah):
not_null(self.invoice)
self.invoice.faktor_pengurang_sppt += penambah
self.invoice.faktor_pengurang_sppt += penambah
self.invoice.pbb_yg_harus_dibayar_sppt = \
self.invoice.pbb_terhutang_sppt - \
self.invoice.faktor_pengurang_sppt
......
......@@ -41,7 +41,7 @@ class Inquiry(BaseInquiry, Common):
def rumus_discount_denda_2020(self):
if self.invoice.thn_pajak_sppt < '2020':
self.discount = self.denda
self.discount = self.denda
def hitung_discount(self): # Override
if self.tgl_bayar.year == 2020 and self.tgl_bayar.month in (7, 8):
......
from datetime import datetime
from sqlalchemy import func
from opensipkd.hitung import round_up
from sismiop.models.serang_kab import (
ObjekPajak,
Sppt,
PembayaranSppt,
Kelurahan,
Kecamatan,
Propinsi,
)
from ..base import (
AvailableInvoice as BaseAvailableInvoice,
Inquiry as BaseInquiry,
Reversal as BaseReversal,
get_db_session,
)
class Inquiry(BaseInquiry):
def hitung_pokok(self): # Override
DBSession = get_db_session()
Payment = self.get_payment_model()
q = DBSession.query(
func.sum(Payment.jml_pbb_yg_dibayar).
label('jml_sppt_yg_dibayar'),
func.sum(Payment.jml_denda_sppt).
label('denda_sppt'))
q = self.get_filter(q)
bayar = q.first()
self.total_bayar = bayar.jml_sppt_yg_dibayar or 0
denda_lalu = bayar.denda_sppt or 0
sisa = float(self.total_bayar - denda_lalu)
tagihan = self.invoice.pbb_yg_hrs_dibayar_sppt - sisa
if tagihan < 0:
self.tagihan = 0
else:
self.tagihan = round_up(tagihan)
def do_payment(self, bank_fields, user_id, ntp=None, ntb=None): # Override
DBSession = get_db_session()
Payment = self.get_payment_model()
bayar = self.invoice2payment()
if bayar:
ke = bayar.pembayaran_sppt_ke + 1
else:
ke = 1
inv = self.invoice
bayar = Payment(
kd_propinsi=inv.kd_propinsi, kd_dati2=inv.kd_dati2,
kd_kecamatan=inv.kd_kecamatan, kd_kelurahan=inv.kd_kelurahan,
kd_blok=inv.kd_blok, no_urut=inv.no_urut,
kd_jns_op=inv.kd_jns_op, thn_pajak_sppt=inv.thn_pajak_sppt,
pembayaran_sppt_ke=ke, tgl_rekam_byr_sppt=datetime.now(),
tgl_pembayaran_sppt=self.tgl_bayar,
no_transaksi_byr_sppt=ntp,
no_transaksi_byr_sppt_bank=ntb,
user_bank_rekam=user_id,
jml_pbb_yg_dibayar=self.tagihan+self.denda,
jml_denda_sppt=self.denda,
kd_sumber_data='5')
for key, value in bank_fields.items():
setattr(bayar, key, value)
self.before_save(bayar)
DBSession.add(bayar)
self.invoice.status_pembayaran_sppt = '1' # Lunas
DBSession.add(self.invoice)
return bayar
def get_op_model(self): # Override
return ObjekPajak
def get_invoice_model(self): # Override
return Sppt
def get_payment_model(self): # Override
return PembayaranSppt
def get_kelurahan_model(self): # Override
return Kelurahan
def get_kecamatan_model(self): # Override
return Kecamatan
def get_propinsi_model(self): # Override
return Propinsi
class Reversal(BaseReversal):
def do_reversal(self): # Override
DBSession = get_db_session()
self.payment.jml_pbb_yg_dibayar = self.payment.jml_denda_sppt = 0
self.before_save()
DBSession.add(self.payment)
self.invoice.status_pembayaran_sppt = '0'
DBSession.add(self.invoice)
def get_invoice_model(self): # Override
return Sppt
def get_payment_model(self): # Override
return PembayaranSppt
class AvailableInvoice(BaseAvailableInvoice):
def get_invoice_model(self): # Override
return Sppt
def get_payment_model(self): # Override
return PembayaranSppt
def get_inquiry_class(self): # Override
return Inquiry
......@@ -63,7 +63,6 @@ class Inquiry(BaseInquiry):
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:
......
......@@ -79,7 +79,7 @@ class Inquiry(BaseInquiry):
# Halaman 5 pasal 4
def hitung_discount_denda_sk_34_2020(self):
if self.invoice.thn_pajak_sppt < '2020':
return self.denda
return self.denda
return 0
def hitung_discount_denda(self):
......
......@@ -18,7 +18,7 @@ class Inquiry(BaseInquiry):
def before_save(self, payment): # Override
# Sekedar catatan
payment.denda_sblm_diskon = self.denda_sblm_diskon
payment.discount = self.discount_pokok + self.discount_denda
payment.discount = self.discount_pokok + self.discount_denda
payment.discount_pokok = self.discount_pokok
......
......@@ -62,7 +62,6 @@ class Inquiry(BaseInquiry):
return bayar
class Reversal(BaseReversal):
def get_invoice_model(self):
return Sppt
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!