Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
Owo Sugiana
/
opensipkd-pad-models
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit d80c0074
authored
Feb 06, 2025
by
Owo Sugiana
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
Tambah Opsen untuk laporan ke Pemerintah Provinsi
1 parent
68206f12
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
136 additions
and
78 deletions
CHANGES.txt
opensipkd/pad/models/banjar.py
opensipkd/pad/models/default.py
opensipkd/pad/scripts/available_invoice.py
opensipkd/pad/scripts/inquiry.py
opensipkd/pad/services/bekasi_kab.py
opensipkd/pad/services/default.py
opensipkd/pad/services/subang.py
opensipkd/pad/services/tangerang_kab.py
opensipkd/pad/services/tangsel.py
pyproject.toml
CHANGES.txt
View file @
d80c007
0.6 2025-02-06
--------------
- Tambah Opsen untuk laporan ke Pemerintah Provinsi.
0.5.21 2025-01-22
-----------------
- Kabupaten Magelang mengenakan denda 1% mulai masa pajak Oktober 2024 tanggal
...
...
opensipkd/pad/models/banjar.py
View file @
d80c007
...
...
@@ -325,6 +325,7 @@ class Invoice(Base):
r_alamat
=
Column
(
String
(
255
))
# m_tonase = Column(Float)
# m_njop = Column(Float)
opsen_pokok
=
Column
(
Float
)
__table_args__
=
(
UniqueConstraint
(
'tahun'
,
'sptno'
),
UniqueConstraint
(
'tahun'
,
'sptno'
,
'customer_usaha_id'
,
'masadari'
),
...
...
@@ -488,6 +489,8 @@ class Payment(Base):
denda
=
Column
(
Integer
)
jml_bayar
=
Column
(
Integer
)
is_valid
=
Column
(
Integer
)
opsen_pokok
=
Column
(
Float
)
opsen_denda
=
Column
(
Float
)
__table_args__
=
(
UniqueConstraint
(
'tahun'
,
'sspdno'
),
dict
(
schema
=
'pad'
))
...
...
opensipkd/pad/models/default.py
View file @
d80c007
...
...
@@ -324,6 +324,7 @@ class Invoice(Base):
r_alamat
=
Column
(
String
(
255
))
# m_tonase = Column(Float)
# m_njop = Column(Float)
opsen_pokok
=
Column
(
Float
)
__table_args__
=
(
UniqueConstraint
(
'tahun'
,
'sptno'
),
UniqueConstraint
(
'tahun'
,
'sptno'
,
'customer_usaha_id'
,
'masadari'
),
...
...
@@ -378,6 +379,8 @@ class Payment(Base):
jml_bayar
=
Column
(
Integer
)
is_valid
=
Column
(
Integer
)
discount_denda
=
Column
(
Float
)
opsen_pokok
=
Column
(
Float
)
opsen_denda
=
Column
(
Float
)
__table_args__
=
(
UniqueConstraint
(
'tahun'
,
'sspdno'
),
dict
(
schema
=
'pad'
))
...
...
opensipkd/pad/scripts/available_invoice.py
View file @
d80c007
...
...
@@ -6,6 +6,7 @@ from .common import init
default_count
=
10
help_jenis
=
'dari field pad_usaha.usahanm'
help_rekening
=
'dari field tblrekening.rekeningkd'
help_opsen
=
'dari field pad_spt.opsen_pokok'
help_tipe
=
'dari tabel pad_spt_type'
help_tgl
=
'dd-mm-yyyy'
help_count
=
f
'default {default_count}'
...
...
@@ -21,6 +22,8 @@ def get_option(argv):
pars
.
add_argument
(
'--jatuh-tempo-max'
,
help
=
help_tgl
)
pars
.
add_argument
(
'--nominal-min'
,
type
=
int
)
pars
.
add_argument
(
'--nominal-max'
,
type
=
int
)
pars
.
add_argument
(
'--opsen-min'
,
type
=
int
,
help
=
help_opsen
)
pars
.
add_argument
(
'--opsen-max'
,
type
=
int
,
help
=
help_opsen
)
pars
.
add_argument
(
'--tgl-kohir-min'
)
pars
.
add_argument
(
'--tgl-kohir-max'
)
pars
.
add_argument
(
'--tipe'
,
help
=
help_tipe
)
...
...
opensipkd/pad/scripts/inquiry.py
View file @
d80c007
...
...
@@ -69,14 +69,27 @@ def show(inq):
show_val
(
'Kecamatan Objek Pajak'
,
inq
.
get_kecamatan_op
())
show_val
(
'Jatuh Tempo'
,
inq
.
get_jatuh_tempo
())
show_val
(
'Jumlah Bulan Denda'
,
inq
.
bln_tunggakan
)
show_rp
(
'Tagihan'
,
inq
.
tagihan
)
show_rp
(
'Tagihan Pokok'
,
inq
.
pokok
)
show_rp
(
'Opsen Pokok'
,
inq
.
opsen_pokok
)
show_field
(
inq
.
invoice
,
'pajak_terhutang'
)
show_field
(
inq
.
invoice
,
'bunga'
)
show_field
(
inq
.
invoice
,
'opsen_pokok'
)
try
:
show_rp
(
'Denda Jatuh Tempo'
,
inq
.
denda_waktu
)
show_rp
(
'Denda Pokok (Jatuh Tempo)'
,
inq
.
denda_pokok
)
except
AttributeError
:
pass
try
:
show_rp
(
'Opsen Denda (Jatuh Tempo)'
,
inq
.
opsen_denda
)
except
AttributeError
:
pass
try
:
show_rp
(
'Discount Denda Pokok'
,
inq
.
discount_denda_pokok
)
except
AttributeError
:
pass
try
:
show_rp
(
'Discount Opsen Denda'
,
inq
.
discount_opsen_denda
)
except
AttributeError
:
pass
show_rp
(
'Discount Denda'
,
inq
.
discount_denda
)
if
inq
.
notes
:
show_val
(
'Note'
,
inq
.
notes
)
show_rp
(
'Total Denda'
,
inq
.
denda
)
...
...
opensipkd/pad/services/bekasi_kab.py
View file @
d80c007
...
...
@@ -89,58 +89,76 @@ NOTE_TGL_TERIMA = 'field terimatgl {tgl} >= ' + dmy(AKHIR_TERIMA)
class
Inquiry
(
BaseInquiry
):
invoice_id_structure
=
INVOICE_ID
def
hitung
_denda
(
self
):
# Override
def
get_persen
_denda
(
self
):
# Override
tgl_kohir
=
self
.
get_tgl_kohir
()
if
tgl_kohir
:
tahun_terbit
=
tgl_kohir
.
year
else
:
tahun_terbit
=
self
.
invoice
.
masadari
.
year
if
tahun_terbit
>
2023
:
persen_denda
=
1
# 5: SKPDKB, 6: SKPDJ, 7: SKPDKBT, 15: SK Angsuran
if
self
.
invoice
.
type_id
in
(
5
,
6
,
7
,
15
):
persen_denda
=
0.6
else
:
persen_denda
=
self
.
conf
[
'persen_denda'
]
return
0.6
return
1
return
2
def
hitung_denda_waktu
(
self
):
persen_denda
=
self
.
get_persen_denda
()
d
=
Denda
(
self
.
pokok
,
self
.
invoice
.
jatuhtempotgl
,
persen_denda
,
self
.
tgl_bayar
.
date
(),
self
.
invoice
)
self
.
bln_tunggakan
,
self
.
denda_pokok
=
d
.
hitung
()
self
.
denda_pokok
=
round_up
(
self
.
denda_pokok
)
d
=
Denda
(
self
.
invoice
.
opsen_pokok
,
self
.
invoice
.
jatuhtempotgl
,
persen_denda
,
self
.
tgl_bayar
.
date
(),
self
.
invoice
)
_
,
self
.
opsen_denda
=
d
.
hitung
()
self
.
opsen_denda
=
round_up
(
self
.
opsen_denda
)
def
hitung_denda
(
self
):
# Override
bunga
=
self
.
invoice
.
bunga
or
0
self
.
denda
=
self
.
bunga
=
round_up
(
bunga
)
bunga
=
round_up
(
bunga
)
if
self
.
invoice
.
jatuhtempotgl
:
d
=
Denda
(
self
.
tagihan
,
self
.
invoice
.
jatuhtempotgl
,
persen_denda
,
self
.
tgl_bayar
.
date
(),
self
.
invoice
)
self
.
bln_tunggakan
,
self
.
denda_waktu
=
d
.
hitung
()
self
.
denda_waktu
=
round_up
(
self
.
denda_waktu
)
self
.
denda
+=
self
.
denda_waktu
if
self
.
invoice
.
status_pembayaran
==
0
:
self
.
hitung_denda_waktu
()
self
.
denda_pokok
+=
bunga
else
:
self
.
bln_tunggakan
=
self
.
denda_pokok
=
self
.
opsen_denda
=
0
else
:
self
.
bln_tunggakan
=
None
self
.
denda_pokok
=
bunga
self
.
discount_denda
=
self
.
get_discount_denda
()
self
.
denda
-=
self
.
discount_denda
self
.
discount_denda_pokok
,
self
.
discount_opsen_denda
=
\
self
.
get_discount_denda
()
self
.
total_denda_pokok
=
self
.
denda_pokok
-
self
.
discount_denda_pokok
self
.
total_opsen_denda
=
self
.
opsen_denda
-
self
.
discount_opsen_denda
self
.
denda
=
self
.
total_denda_pokok
+
self
.
total_opsen_denda
self
.
denda
=
round_up
(
self
.
denda
)
def
get_discount_denda
(
self
):
# Override
self
.
notes
=
[]
rek
=
self
.
rekening
.
rekeningkd
if
rek
in
self
.
conf
.
get
(
'rekening_tanpa_denda'
,
[]):
self
.
notes
.
append
(
NOTE_REK
.
format
(
rek
=
rek
))
return
self
.
denda
return
self
.
denda
_pokok
,
self
.
opsen_denda
tgl_bayar
=
self
.
tgl_bayar
.
date
()
if
tgl_bayar
>
AKHIR_TGL_BAYAR
:
return
0
return
0
,
0
tgl_masa
=
self
.
invoice
.
masadari
.
date
()
if
tgl_masa
>
AKHIR_MASA
:
return
0
return
0
,
0
notes
=
[
NOTE_TGL_BAYAR
.
format
(
tgl
=
dmy
(
tgl_bayar
)),
NOTE_AKHIR_MASA
.
format
(
tgl
=
dmy
(
tgl_masa
))]
if
tgl_masa
<=
AKHIR_MASA
:
notes
.
append
(
NOTE_AKHIR_MASA
.
format
(
tgl
=
dmy
(
tgl_masa
)))
self
.
notes
=
notes
return
self
.
denda
return
self
.
denda
_pokok
,
self
.
opsen_denda
tgl_terima
=
self
.
invoice
.
terimatgl
.
date
()
if
tgl_terima
<=
AKHIR_TERIMA
:
notes
.
append
(
NOTE_TGL_TERIMA
.
format
(
tgl
=
tgl_terima
))
self
.
notes
=
notes
return
self
.
denda
return
0
return
self
.
denda
_pokok
,
self
.
opsen_denda
return
0
,
0
def
get_invoice_model
(
self
):
# Override
return
Invoice
...
...
opensipkd/pad/services/default.py
View file @
d80c007
...
...
@@ -296,42 +296,52 @@ class Inquiry(BaseInquiry):
def
get_payment_amount
(
self
):
Payment
=
self
.
get_payment_model
()
DBSession
=
get_db_session
()
q
=
DBSession
.
query
(
func
.
sum
(
Payment
.
jml_bayar
)
.
label
(
'jml'
))
q
=
DBSession
.
query
(
func
.
sum
(
Payment
.
jml_bayar
+
Payment
.
opsen_pokok
))
q
=
q
.
filter_by
(
spt_id
=
self
.
invoice
.
id
)
pay
=
q
.
first
()
return
pay
.
jml
or
0
return
q
.
scalar
()
or
0
def
hitung_tagihan
(
self
):
self
.
tagihan
=
self
.
invoice
.
pajak_terhutang
-
self
.
invoice
.
bunga
self
.
tagihan
=
round_up
(
self
.
tagihan
)
self
.
pokok
=
self
.
invoice
.
pajak_terhutang
-
self
.
invoice
.
bunga
self
.
total_pokok
=
self
.
pokok
+
self
.
invoice
.
opsen_pokok
self
.
total_pokok
=
round_up
(
self
.
total_pokok
)
self
.
opsen_pokok
=
round_up
(
self
.
invoice
.
opsen_pokok
)
def
hitung_denda
(
self
):
self
.
bln_tunggakan
=
None
self
.
denda
=
0
if
self
.
get_type_name
()
.
strip
()
==
'STPD'
:
self
.
denda
=
round_up
(
self
.
invoice
.
bunga
)
self
.
denda_pokok
=
round_up
(
self
.
invoice
.
bunga
)
self
.
bln_tunggakan
=
self
.
opsen_denda
=
0
elif
self
.
invoice
.
jatuhtempotgl
:
if
self
.
invoice
.
status_pembayaran
==
0
:
self
.
hitung_denda_waktu
()
else
:
self
.
bln_tunggakan
=
self
.
denda_waktu
=
0
self
.
denda
=
self
.
denda_waktu
+
self
.
invoice
.
bunga
self
.
denda
=
round_up
(
self
.
denda
)
self
.
discount_denda
=
self
.
get_discount_denda
()
self
.
denda
-=
self
.
discount_denda
def
hitung_denda_waktu
(
self
):
self
.
bln_tunggakan
=
self
.
denda_pokok
=
self
.
opsen_denda
=
0
self
.
discount_denda_pokok
,
self
.
discount_opsen_denda
=
\
self
.
get_discount_denda
()
self
.
total_denda_pokok
=
self
.
denda_pokok
-
self
.
discount_denda_pokok
self
.
total_opsen_denda
=
self
.
opsen_denda
-
self
.
discount_opsen_denda
self
.
denda
=
self
.
total_denda_pokok
+
self
.
total_opsen_denda
self
.
denda
=
round_up
(
self
.
denda
)
def
get_persen_denda
(
self
):
tahun_terbit
=
self
.
get_jatuh_tempo
()
.
year
if
tahun_terbit
>
2023
:
persen_denda
=
1
else
:
persen_denda
=
self
.
conf
[
'persen_denda'
]
self
.
bln_tunggakan
,
self
.
denda_waktu
=
hitung_denda
(
self
.
tagihan
,
self
.
invoice
.
jatuhtempotgl
,
persen_denda
,
self
.
tgl_bayar
.
date
())
return
1
return
2
def
hitung_denda_waktu
(
self
):
persen_denda
=
self
.
get_persen_denda
()
tgl_bayar
=
self
.
tgl_bayar
.
date
()
self
.
bln_tunggakan
,
self
.
denda_pokok
=
hitung_denda
(
self
.
pokok
,
self
.
invoice
.
jatuhtempotgl
,
persen_denda
,
tgl_bayar
)
_
,
self
.
opsen_denda
=
hitung_denda
(
self
.
invoice
.
opsen_pokok
,
self
.
invoice
.
jatuhtempotgl
,
persen_denda
,
tgl_bayar
)
self
.
opsen_denda
=
round_up
(
self
.
opsen_denda
)
def
get_discount_denda
(
self
):
return
0
return
0
,
0
# denda_pokok, opsen_denda
def
hitung_bayar
(
self
):
bayar
=
self
.
get_payment_amount
()
...
...
@@ -341,7 +351,7 @@ class Inquiry(BaseInquiry):
self
.
hitung_tagihan
()
self
.
hitung_denda
()
self
.
hitung_bayar
()
self
.
total
=
self
.
t
agihan
+
self
.
denda
-
self
.
total_bayar
self
.
total
=
self
.
t
otal_pokok
+
self
.
denda
-
self
.
total_bayar
if
self
.
total
<
0
:
self
.
total
=
0
...
...
@@ -363,9 +373,11 @@ class Inquiry(BaseInquiry):
tahun
=
self
.
invoice
.
tahun
,
spt_id
=
self
.
invoice
.
id
,
sspdno
=
sspdno
,
denda
=
self
.
denda
,
bunga
=
self
.
denda
,
jml_bayar
=
self
.
total
,
denda
=
self
.
total_denda_pokok
,
bunga
=
self
.
total_denda_pokok
,
jml_bayar
=
self
.
pokok
+
self
.
total_denda_pokok
,
opsen_pokok
=
self
.
opsen_pokok
+
self
.
total_opsen_denda
,
opsen_denda
=
self
.
opsen_denda
,
create_date
=
kini
,
write_date
=
kini
,
sspdtgl
=
self
.
tgl_bayar
,
...
...
@@ -398,7 +410,8 @@ class Reversal(BaseInquiry):
DBSession
=
get_db_session
()
if
self
.
payment
:
self
.
payment
.
jml_bayar
=
self
.
payment
.
denda
=
\
self
.
payment
.
bunga
=
0
self
.
payment
.
bunga
=
self
.
payment
.
opsen_pokok
=
\
self
.
payment
.
opsen_denda
=
0
self
.
payment
.
enabled
=
self
.
payment
.
is_valid
=
0
DBSession
.
add
(
self
.
payment
)
self
.
invoice
.
status_pembayaran
=
0
...
...
@@ -480,6 +493,7 @@ class AvailableInvoice:
q
=
self
.
get_filter_rekening
(
q
)
q
=
self
.
get_filter_usaha
(
q
)
q
=
self
.
get_filter_nominal
(
q
)
q
=
self
.
get_filter_opsen
(
q
)
q
=
self
.
get_filter_jatuh_tempo
(
q
)
q
=
self
.
get_filter_masa
(
q
)
q
=
self
.
get_filter_tgl_terima
(
q
)
...
...
@@ -532,6 +546,16 @@ class AvailableInvoice:
self
.
option
.
nominal_max
)
return
q
def
get_filter_opsen
(
self
,
q
):
Invoice
=
self
.
get_invoice_model
()
if
self
.
option
.
opsen_min
:
q
=
q
.
filter
(
Invoice
.
opsen_pokok
>=
self
.
option
.
opsen_min
)
if
self
.
option
.
opsen_max
:
q
=
q
.
filter
(
Invoice
.
opsen_pokok
<=
self
.
option
.
opsen_max
)
return
q
def
get_filter_jatuh_tempo
(
self
,
q
):
Invoice
=
self
.
get_invoice_model
()
if
self
.
option
.
jatuh_tempo_min
:
...
...
@@ -600,7 +624,7 @@ class AvailableInvoice:
if
not
inq
.
total
:
return
total
=
thousand
(
inq
.
total
)
tagihan
=
thousand
(
inq
.
t
agihan
)
tagihan
=
thousand
(
inq
.
t
otal_pokok
)
denda
=
thousand
(
inq
.
denda
)
s
=
f
'{invoice_id.get_raw()} {inq.get_kode_rekening()}'
\
f
' {inq.get_nama_rekening()} Rp {total} ='
\
...
...
opensipkd/pad/services/subang.py
View file @
d80c007
...
...
@@ -19,29 +19,23 @@ INVOICE_ID = [('Prefix', 4, 'N')] + INVOICE_ID
class
Inquiry
(
BaseInquiry
):
invoice_id_structure
=
INVOICE_ID
def
hitung_denda_waktu
(
self
):
# Override
def
get_persen_denda
(
self
):
# Override
tgl_kohir
=
self
.
get_tgl_kohir
()
if
tgl_kohir
:
tahun_terbit
=
tgl_kohir
.
year
else
:
tahun_terbit
=
self
.
invoice
.
masadari
.
year
if
tahun_terbit
>
2023
:
persen_denda
=
1
if
self
.
get_type_name
()
.
strip
()
in
(
'SSPD'
,
'SELF'
):
persen_denda
=
1
else
:
persen_denda
=
self
.
conf
[
'persen_denda'
]
self
.
bln_tunggakan
,
self
.
denda_waktu
=
hitung_denda
(
self
.
tagihan
,
self
.
invoice
.
jatuhtempotgl
,
persen_denda
,
self
.
tgl_bayar
.
date
())
return
1
return
2
def
get_discount_denda
(
self
):
# Override
tgl_bayar
=
self
.
tgl_bayar
.
date
()
if
AWAL_DISC
<=
tgl_bayar
<=
AKHIR_DISC
:
tgl
=
self
.
invoice
.
masadari
.
date
()
if
tgl
.
year
==
2024
:
return
self
.
denda
return
0
return
self
.
denda
_pokok
,
self
.
opsen_denda
return
0
,
0
def
get_kohir_model
(
self
):
return
Kohir
...
...
opensipkd/pad/services/tangerang_kab.py
View file @
d80c007
...
...
@@ -60,15 +60,15 @@ class Inquiry(BaseInquiry):
self
.
tgl_bayar
.
date
())
if
self
.
invoice
.
bunga
<
1
or
self
.
bln_tunggakan
<
1
:
return
denda_p
er_bln
=
self
.
denda_waktu
/
self
.
bln_tunggakan
max_denda
=
24
*
denda_per_bl
n
denda
=
self
.
denda_waktu
+
self
.
invoice
.
bunga
if
max_denda
>
0
and
denda
>=
max_denda
:
if
self
.
bln_tunggakan
>
24
:
self
.
bln_tunggakan
=
24
self
.
denda_waktu
=
max_denda
-
self
.
invoice
.
bunga
if
self
.
denda_waktu
<
0
:
self
.
denda_waktu
=
0
denda_p
okok_per_bln
=
self
.
denda_pokok
/
self
.
bln_tunggakan
opsen_denda_per_bln
=
self
.
opsen_denda
/
self
.
bln_tunggaka
n
max_denda_pokok
=
24
*
denda_pokok_per_bln
max_opsen_denda
=
24
*
opsen_denda_per_bln
max_denda
=
max_denda_pokok
+
max_opsen_denda
if
max_denda
>
0
and
self
.
total_denda
>=
max_denda
:
self
.
bln_tunggakan
=
24
self
.
denda_pokok
=
max_denda_pokok
-
self
.
invoice
.
bunga
self
.
opsen_denda
=
max_opsen_denda
def
get_discount_denda
(
self
):
# Override
tgl_bayar
=
self
.
tgl_bayar
.
date
()
...
...
opensipkd/pad/services/tangsel.py
View file @
d80c007
...
...
@@ -86,19 +86,15 @@ class Inquiry(BaseInquiry):
return
self
.
denda
return
0
def
hitung_denda_waktu
(
self
):
# Override
def
get_persen_denda
(
self
):
# Override
tgl_kohir
=
self
.
get_tgl_kohir
()
if
tgl_kohir
:
tahun_terbit
=
tgl_kohir
.
year
else
:
tahun_terbit
=
self
.
invoice
.
masadari
.
year
if
tahun_terbit
>
2023
:
persen_denda
=
1
else
:
persen_denda
=
self
.
conf
[
'persen_denda'
]
self
.
bln_tunggakan
,
self
.
denda_waktu
=
hitung_denda
(
self
.
tagihan
,
self
.
invoice
.
jatuhtempotgl
,
persen_denda
,
self
.
tgl_bayar
.
date
())
return
1
return
2
def
before_save
(
self
,
pay
):
# Override
pay
.
discount_denda
=
self
.
discount_denda
...
...
pyproject.toml
View file @
d80c007
...
...
@@ -3,7 +3,7 @@ requires = ['setuptools >= 64']
[project]
name
=
'opensipkd-pad-models'
version
=
'
0.
5.21
'
version
=
'
0.
6
'
dependencies
=
[
'sqlalchemy'
,
'zope.sqlalchemy'
,
...
...
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment