query_tangsel.py
3.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
from datetime import date
from .query import CalculateInvoice as BaseCalculateInvoice
# DISKON POKOK JAN-JUN 2021
DISC_TAHUN_PAJAK = '2021'
DISC_POKOK_JAN_JUN = {
2021: {
1: 0.15,
2: 0.15,
3: 0.15,
4: 0.1,
5: 0.05,
6: 0.05,
},
}
# DISKON JUL-DES 2021 @20210625
# 1. TAHUN PAJAK < 2014 DISKON POKOK 75%
# 2. TAHUN PAJAK 2014-2020 DISKON POKOK 40%
# 3. TAHUN PAJAK < 2021 DISKON DENDA 100%
# 4. BERLAKU MULAI 1 JULI 2021 sd 31 DES 2021
BERLAKU_MIN = date(2021, 7, 1)
BERLAKU_MAX = date(2021, 12, 31)
THN_PAJAK_MIN = 2014
THN_PAJAK_MAX = 2021
DISC_DENDA_JUL_DES = 1.0
DISC_POKOK_JUL_DES = {
2014: 0.75,
2021: 0.4,
}
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 CalculateInvoice(BaseCalculateInvoice):
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):
if self.denda > 0 and int(self.tahun) < THN_PAJAK_MAX \
and BERLAKU_MIN <= self.tgl_bayar.date() <= BERLAKU_MAX:
self.denda_sblm_diskon = self.denda
return int(self.denda * DISC_DENDA_JUL_DES)
return 0
def hitung_discount_pokok(self):
faktor_pengurang = self.invoice.faktor_pengurang_sppt or 0
if faktor_pengurang > 0:
return 0
return self.hitung_discount_pokok2()
def hitung_discount_pokok2(self):
if BERLAKU_MIN <= self.tgl_bayar.date() <= BERLAKU_MAX:
if int(self.tahun) < THN_PAJAK_MIN:
disc = DISC_POKOK_JUL_DES.get(THN_PAJAK_MIN)
return int(self.tagihan * disc)
elif THN_PAJAK_MIN <= int(self.tahun) < THN_PAJAK_MAX:
disc = DISC_POKOK_JUL_DES.get(THN_PAJAK_MAX)
return int(self.tagihan * disc)
if self.invoice.thn_pajak_sppt == DISC_TAHUN_PAJAK:
bulan_disc = DISC_POKOK_JAN_JUN.get(self.tgl_bayar.year)
if bulan_disc:
disc = bulan_disc.get(self.tgl_bayar.month)
if disc:
return int(self.tagihan * disc)
return 0
def set_faktor_pengurang_sppt(self, payment):
if not payment.discount_pokok:
return
not_null(self.invoice)
self.invoice.faktor_pengurang_sppt += payment.discount_pokok
self.invoice.pbb_yg_harus_dibayar_sppt = \
self.invoice.pbb_terhutang_sppt - \
self.invoice.faktor_pengurang_sppt
def before_save(self, bayar): # Override
bayar.denda_sblm_diskon = self.denda_sblm_diskon
bayar.discount = self.discount_pokok + self.discount_denda
bayar.discount_pokok = self.discount_pokok
bayar.discount_denda = self.discount_denda
tagihan_netto = self.tagihan - self.discount_pokok
denda_netto = self.denda - self.discount_denda
bayar.jml_sppt_yg_dibayar = tagihan_netto + denda_netto
bayar.denda_sppt = denda_netto
self.set_faktor_pengurang_sppt(bayar)
def belum_lunas_di_periode_discount(self):
Sppt = self.models.Invoice
q = self.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 get_filter_op(self, q):
return q.filter_by(
kd_propinsi=self.propinsi,
kd_dati2=self.kabupaten,
kd_kecamatan=self.kecamatan,
kd_kelurahan=self.kelurahan,
kd_blok=self.blok,
no_urut=self.urut,
kd_jns_op=self.jenis)