Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
Owo Sugiana
/
opensipkd-bphtb-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 eda60a06
authored
Jun 13, 2026
by
Owo Sugiana
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
Tambah Kota Cimahi
1 parent
cb379110
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
430 additions
and
1 deletions
CHANGES.txt
opensipkd/bphtb/models/cimahi.py
opensipkd/bphtb/scripts/inquiry.py
opensipkd/bphtb/services/cimahi.py
CHANGES.txt
View file @
eda60a0
0.4.11 2026-06-13
-----------------
- Tambah Kota Cimahi
0.4.10 2026-06-02
-----------------
- Di Kabupaten Tasik mulai 1 Juni dikenakan denda 1% per bulan.
...
...
opensipkd/bphtb/models/cimahi.py
0 → 100644
View file @
eda60a0
from
sqlalchemy
import
(
Column
,
Integer
,
String
,
DateTime
,
Float
,
Text
,
UniqueConstraint
,
)
from
sqlalchemy.ext.declarative
import
declarative_base
Base
=
declarative_base
()
class
Notaris
(
Base
):
__tablename__
=
'r_ppat'
kd_ppat
=
Column
(
String
(
5
),
primary_key
=
True
)
nama_ppat
=
Column
(
Text
,
nullable
=
False
)
class
Invoice
(
Base
):
__tablename__
=
'bookppat'
doc_id
=
Column
(
Integer
,
primary_key
=
True
)
kd_ppat
=
Column
(
String
(
5
),
nullable
=
False
)
th_booking
=
Column
(
String
(
4
),
nullable
=
False
)
no_booking
=
Column
(
String
(
6
))
no_booking2
=
Column
(
String
(
6
))
no_kunci
=
Column
(
String
(
8
))
tgl_booking
=
Column
(
DateTime
())
nop_dt1
=
Column
(
String
(
2
))
nop_dt2
=
Column
(
String
(
2
))
nop_camat
=
Column
(
String
(
3
))
nop_lurah
=
Column
(
String
(
3
))
nop_blok
=
Column
(
String
(
3
))
nop_urut
=
Column
(
String
(
4
))
nop_kode
=
Column
(
String
(
1
))
nama_wp
=
Column
(
String
(
50
))
alamat_wp
=
Column
(
String
(
50
))
rtrw_wp
=
Column
(
String
(
7
))
lurah_wp
=
Column
(
String
(
25
))
camat_wp
=
Column
(
String
(
25
))
kota_wp
=
Column
(
String
(
25
))
kodepos
=
Column
(
String
(
5
))
npwp_wp
=
Column
(
String
(
15
))
nama_ow
=
Column
(
String
(
50
))
alamat_ow
=
Column
(
String
(
50
))
rtrw_ow
=
Column
(
String
(
7
))
lurah_ow
=
Column
(
String
(
30
))
camat_ow
=
Column
(
String
(
30
))
kota_ow
=
Column
(
String
(
25
))
kodepos_ow
=
Column
(
String
(
5
))
npwp_ow
=
Column
(
String
(
15
))
alamat_op
=
Column
(
String
(
50
))
rtrw_op
=
Column
(
String
(
7
))
lurah_op
=
Column
(
String
(
30
))
camat_op
=
Column
(
String
(
30
))
kota_op
=
Column
(
String
(
25
))
no_serti
=
Column
(
String
(
100
))
kd_strata
=
Column
(
Integer
)
luas_tanah
=
Column
(
Float
)
njop_tanah
=
Column
(
Integer
)
nil_tanah
=
Column
(
Integer
)
luas_bang
=
Column
(
Float
)
njop_bang
=
Column
(
Integer
)
nilai_bang
=
Column
(
Integer
)
njop_pbb
=
Column
(
Integer
)
harga_tran
=
Column
(
Integer
)
kd_jphtb
=
Column
(
String
(
2
))
pecah_bag
=
Column
(
Integer
)
dari_bag
=
Column
(
Integer
)
npop
=
Column
(
Integer
)
npoptkp
=
Column
(
Integer
)
npopkp
=
Column
(
Integer
)
bphtb_utg
=
Column
(
Integer
)
kd_prosen
=
Column
(
Float
)
prosen_rp
=
Column
(
Integer
)
denda_bln
=
Column
(
Integer
)
denda_rp
=
Column
(
Integer
)
pengenaan
=
Column
(
Integer
)
kd_setor
=
Column
(
String
(
1
))
sbb_kdset
=
Column
(
String
(
2
))
nomor
=
Column
(
String
(
20
))
tanggal
=
Column
(
DateTime
)
kd_bayar
=
Column
(
String
(
1
))
nil_setor
=
Column
(
Integer
)
kd_tmpbyr
=
Column
(
String
(
2
))
kd_terima
=
Column
(
Integer
)
tgl_terima
=
Column
(
DateTime
)
nm_terima
=
Column
(
String
(
30
))
tgl_setor
=
Column
(
DateTime
)
nm_setor
=
Column
(
String
(
30
))
kd_pejabat
=
Column
(
String
(
1
))
nm_pejabat
=
Column
(
String
(
30
))
lt_kotor
=
Column
(
Float
)
lb_kotor
=
Column
(
Float
)
lb_efektif
=
Column
(
Float
)
lb_unit
=
Column
(
Float
)
lt_kotor_njop
=
Column
(
Integer
)
lb_kotor_njop
=
Column
(
Integer
)
lt_kotor_r
=
Column
(
Float
)
lb_efektif_r
=
Column
(
Float
)
lb_kotor_r
=
Column
(
Float
)
lt_kotor_njop_r
=
Column
(
Integer
)
lb_efektif_njop_r
=
Column
(
Integer
)
lb_kotor_njop_r
=
Column
(
Integer
)
lt_kotor_nil
=
Column
(
Integer
)
lb_efektif_nil
=
Column
(
Integer
)
lb_kotor_nil
=
Column
(
Integer
)
njop_pbb_nil
=
Column
(
Integer
)
fl_npopkp
=
Column
(
String
(
1
))
Status
=
Column
(
String
(
1
))
tgl_terima_berkas
=
Column
(
DateTime
)
tgl_retrieve
=
Column
(
DateTime
)
tgl_validasi
=
Column
(
DateTime
)
tgl_diserahkan
=
Column
(
DateTime
)
tgl_approve_bpn
=
Column
(
DateTime
)
tgl_selesai_bpn
=
Column
(
DateTime
)
NoBlanko
=
Column
(
String
(
10
))
keterangan
=
Column
(
String
(
100
))
tahun_ajb
=
Column
(
String
(
4
))
petugas
=
Column
(
String
(
10
))
th_skb
=
Column
(
String
(
4
))
kd_skbkb
=
Column
(
String
(
6
))
__table_args__
=
(
UniqueConstraint
(
kd_ppat
,
th_booking
,
no_booking
,
no_booking2
,
no_kunci
),
)
class
Payment
(
Base
):
__tablename__
=
't_bank'
doc_id
=
Column
(
Integer
,
primary_key
=
True
)
no_transaksi
=
Column
(
String
(
20
))
nop_dt1
=
Column
(
String
(
2
))
nop_dt2
=
Column
(
String
(
2
))
nop_camat
=
Column
(
String
(
3
))
nop_lurah
=
Column
(
String
(
3
))
nop_blok
=
Column
(
String
(
3
))
nop_urut
=
Column
(
String
(
4
))
nop_kode
=
Column
(
String
(
1
))
nama_wp
=
Column
(
String
(
50
))
npwp
=
Column
(
String
(
15
))
alamat_wp
=
Column
(
String
(
50
))
lurah_wp
=
Column
(
String
(
25
))
rtrw_wp
=
Column
(
String
(
7
))
camat_wp
=
Column
(
String
(
25
))
kota_wp
=
Column
(
String
(
25
))
kodepos
=
Column
(
String
(
5
))
alamat_op
=
Column
(
String
(
50
))
nil_setor
=
Column
(
Integer
)
kode_bank
=
Column
(
String
(
2
))
tgl_transaksi
=
Column
(
DateTime
)
nm_ptgs
=
Column
(
String
(
30
))
no_seri
=
Column
(
String
(
10
))
kd_ppat
=
Column
(
String
(
5
))
th_booking
=
Column
(
String
(
4
))
no_book
=
Column
(
String
(
6
))
th_kb
=
Column
(
String
(
4
))
no_kb
=
Column
(
String
(
6
))
no_booking
=
Column
(
String
(
15
))
ct
=
Column
(
Integer
)
USERID
=
Column
(
String
(
12
))
UPDATETIME
=
Column
(
DateTime
)
# Tidak perlu mendapatkan nilai doc_id yang dipicu oleh trigger agar tidak
# error
__table_args__
=
dict
(
implicit_returning
=
False
)
opensipkd/bphtb/scripts/inquiry.py
View file @
eda60a0
...
...
@@ -51,9 +51,16 @@ def get_option(argv):
def
show_payment_from_inquiry
(
inq
):
try
:
query_payments
=
getattr
(
inq
,
'query_payments'
)
except
AttributeError
:
pay
=
inq
.
get_payment
()
if
pay
:
show_payment
(
pay
)
return
for
no
,
pay
in
enumerate
(
query_payments
()):
print
(
f
'Pembayaran ke-{no+1}'
)
show_payment
(
pay
)
def
show_payment
(
pay
):
...
...
@@ -70,6 +77,10 @@ def show_payment(pay):
# Kota Sukabumi
show_fields
(
pay
,
[
'jumlah_yg_dibayar'
,
'tgl_pembayaran'
,
'tgl_rekam'
])
# Kota Cimahi
show_fields
(
pay
,
[
'doc_id'
,
'tgl_transaksi'
,
'nil_setor'
,
'no_transaksi'
,
'kode_bank'
,
'UPDATETIME'
])
def
show_inquiry
(
inq
):
...
...
@@ -102,7 +113,9 @@ def show_inquiry(inq):
show_val
(
'Kota Wajib Pajak'
,
inq
.
get_kota_wp
())
show_val
(
'Tahun Pajak'
,
inq
.
get_tahun
())
print
(
'Tabel {}:'
.
format
(
inq
.
invoice
.
__table__
.
name
))
show_fields
(
inq
.
invoice
,
[
'status_pembayaran'
])
show_fields
(
inq
.
invoice
,
[
'doc_id'
,
'pengenaan'
,
'denda_rp'
,
'status_pembayaran'
,
'nil_setor'
,
'nomor'
,
'tanggal'
])
show_payment_from_inquiry
(
inq
)
...
...
opensipkd/bphtb/services/cimahi.py
0 → 100644
View file @
eda60a0
from
datetime
import
(
datetime
,
date
,
)
from
sqlalchemy.sql
import
func
from
opensipkd.hitung
import
round_up
from
opensipkd.string
import
FixLength
from
opensipkd.string.money
import
thousand
from
..models.cimahi
import
(
Notaris
,
Invoice
,
Payment
,
)
from
.base
import
(
get_db_session
,
AvailableInvoice
as
BaseAvailableInvoice
,
)
INVOICE_ID
=
[
[
'kd_ppat'
,
5
,
'N'
],
[
'th_booking'
,
4
,
'N'
],
[
'no_booking'
,
6
,
'N'
],
]
class
Common
:
def
__init__
(
self
,
invoice_id
):
self
.
invoice_id
=
invoice_id
self
.
invoice_id_struct
=
FixLength
(
INVOICE_ID
)
self
.
invoice_id_struct
.
set_raw
(
invoice_id
)
self
.
kd_ppat
=
self
.
invoice_id_struct
[
'kd_ppat'
]
self
.
th_booking
=
self
.
invoice_id_struct
[
'th_booking'
]
self
.
no_booking
=
self
.
invoice_id_struct
[
'no_booking'
]
db_session
=
get_db_session
()
q
=
db_session
.
query
(
Invoice
)
.
filter_by
(
kd_ppat
=
self
.
kd_ppat
,
th_booking
=
self
.
th_booking
,
no_booking
=
self
.
no_booking
)
q
=
q
.
order_by
(
Invoice
.
doc_id
.
desc
())
self
.
invoice
=
q
.
first
()
if
self
.
invoice
and
not
self
.
is_available
():
self
.
invoice
=
None
def
is_available
(
self
):
return
self
.
invoice
.
Status
==
'A'
and
self
.
invoice
.
bphtb_utg
>
0
def
get_payment
(
self
):
db_session
=
get_db_session
()
q
=
db_session
.
query
(
Payment
)
.
filter_by
(
no_booking
=
self
.
invoice_id
)
q
=
q
.
order_by
(
Payment
.
doc_id
.
desc
())
return
q
.
first
()
def
query_payments
(
self
):
db_session
=
get_db_session
()
q
=
db_session
.
query
(
Payment
)
.
filter_by
(
no_booking
=
self
.
invoice_id
)
return
q
.
order_by
(
Payment
.
doc_id
)
class
Inquiry
(
Common
):
def
__init__
(
self
,
invoice_id
,
conf
=
dict
(),
tgl_bayar
=
None
):
super
()
.
__init__
(
invoice_id
)
if
not
self
.
invoice
:
return
self
.
conf
=
conf
self
.
tgl_bayar
=
tgl_bayar
or
date
.
today
()
self
.
notaris
=
self
.
get_notaris
()
self
.
rt_wp
,
self
.
rw_wp
=
self
.
invoice
.
rtrw_wp
.
split
(
'/'
)
self
.
hitung
()
def
hitung
(
self
):
self
.
discount
=
0
self
.
tagihan
=
round_up
(
self
.
invoice
.
pengenaan
)
self
.
denda
=
round_up
(
self
.
invoice
.
denda_rp
)
self
.
total
=
self
.
tagihan
+
self
.
denda
db_session
=
get_db_session
()
q
=
db_session
.
query
(
func
.
sum
(
Payment
.
nil_setor
))
.
filter
(
Payment
.
no_booking
==
self
.
invoice_id
)
self
.
total_bayar
=
q
.
scalar
()
or
0
if
self
.
total_bayar
:
self
.
total
-=
self
.
total_bayar
self
.
bln_tunggakan
=
self
.
invoice
.
denda_bln
def
do_payment
(
self
,
ntb
=
None
,
kode_bank
=
'17'
,
kode_cabang
=
None
,
kode_user
=
None
,
seq
=
None
):
"""
kode_bank dari tabel r_tempat_bayar. 17 = BJB.
"""
if
kode_cabang
:
petugas
=
f
'Cabang {kode_cabang}, User {kode_user}'
else
:
petugas
=
None
db_session
=
get_db_session
()
inv
=
self
.
invoice
pay
=
Payment
(
no_transaksi
=
ntb
,
nop_dt1
=
inv
.
nop_dt1
,
nop_dt2
=
inv
.
nop_dt2
,
nop_camat
=
inv
.
nop_camat
,
nop_lurah
=
inv
.
nop_lurah
,
nop_blok
=
inv
.
nop_blok
,
nop_urut
=
inv
.
nop_urut
,
nop_kode
=
inv
.
nop_kode
,
nama_wp
=
inv
.
nama_wp
,
npwp
=
inv
.
npwp_wp
,
alamat_wp
=
inv
.
alamat_wp
,
lurah_wp
=
inv
.
lurah_wp
,
rtrw_wp
=
inv
.
rtrw_wp
,
camat_wp
=
inv
.
camat_wp
,
kota_wp
=
inv
.
kota_wp
,
kodepos
=
inv
.
kodepos
,
alamat_op
=
inv
.
alamat_op
,
nil_setor
=
self
.
total
,
kode_bank
=
kode_bank
,
tgl_transaksi
=
self
.
tgl_bayar
,
nm_ptgs
=
petugas
,
no_seri
=
None
,
kd_ppat
=
inv
.
kd_ppat
,
th_booking
=
inv
.
th_booking
,
no_book
=
inv
.
no_booking
,
# di aplikasi lama = None
th_kb
=
None
,
no_kb
=
None
,
no_booking
=
self
.
invoice_id
,
ct
=
1
,
USERID
=
'h2h'
,
UPDATETIME
=
datetime
.
now
())
db_session
.
add
(
pay
)
self
.
invoice
.
nil_setor
=
self
.
total
self
.
invoice
.
nomor
=
ntb
self
.
invoice
.
tanggal
=
self
.
tgl_bayar
self
.
invoice
.
kd_tmpbyr
=
kode_bank
self
.
invoice
.
kd_terima
=
1
db_session
.
add
(
self
.
invoice
)
return
pay
def
get_notaris
(
self
):
db_session
=
get_db_session
()
q
=
db_session
.
query
(
Notaris
)
.
filter_by
(
kd_ppat
=
self
.
kd_ppat
)
return
q
.
first
()
def
get_nop
(
self
):
return
self
.
invoice
.
nop_dt1
+
self
.
invoice
.
nop_dt2
+
\
self
.
invoice
.
nop_camat
+
self
.
invoice
.
nop_lurah
+
\
self
.
invoice
.
nop_blok
+
self
.
invoice
.
nop_urut
+
\
self
.
invoice
.
nop_kode
def
get_luas_tanah
(
self
):
return
int
(
self
.
invoice
.
luas_tanah
)
def
get_luas_bangunan
(
self
):
return
int
(
self
.
invoice
.
luas_bang
)
def
get_npop
(
self
):
return
int
(
self
.
invoice
.
npop
)
def
get_jenis_perolehan_hak
(
self
):
return
self
.
invoice
.
kd_jphtb
def
get_nama_notaris
(
self
):
return
self
.
notaris
.
nama_ppat
def
get_nama
(
self
):
return
self
.
invoice
.
nama_wp
def
get_npwp
(
self
):
return
self
.
invoice
.
npwp_wp
def
get_alamat_wp
(
self
):
return
self
.
invoice
.
alamat_wp
def
get_alamat_op
(
self
):
return
self
.
invoice
.
alamat_op
def
get_kota_wp
(
self
):
return
self
.
invoice
.
kota_wp
def
get_kota_op
(
self
):
return
self
.
invoice
.
kota_wp
def
get_kelurahan_wp
(
self
):
return
self
.
invoice
.
lurah_wp
def
get_kecamatan_wp
(
self
):
return
self
.
invoice
.
camat_wp
def
get_rt_wp
(
self
):
return
self
.
rt_wp
def
get_rw_wp
(
self
):
return
self
.
rw_wp
def
get_kode_pos_wp
(
self
):
return
self
.
invoice
.
kodepos
def
get_kelurahan_op
(
self
):
return
self
.
invoice
.
lurah_op
def
get_kecamatan_op
(
self
):
return
self
.
invoice
.
camat_op
def
get_tahun
(
self
):
return
self
.
invoice
.
th_booking
def
get_jatuh_tempo
(
self
):
pass
class
Reversal
(
Common
):
def
__init__
(
self
,
invoice_id
):
super
()
.
__init__
(
invoice_id
)
self
.
payment
=
None
if
not
self
.
invoice
:
return
self
.
payment
=
self
.
get_payment
()
def
do_reversal
(
self
):
db_session
=
get_db_session
()
if
self
.
payment
:
self
.
payment
.
nil_setor
=
0
db_session
.
add
(
self
.
payment
)
self
.
invoice
.
nil_setor
=
0
db_session
.
add
(
self
.
invoice
)
class
AvailableInvoice
(
BaseAvailableInvoice
):
def
get_query
(
self
):
db_session
=
get_db_session
()
q
=
db_session
.
query
(
Invoice
)
.
filter_by
(
Status
=
'A'
,
nil_setor
=
0
)
q
=
q
.
filter
(
Invoice
.
bphtb_utg
>
0
)
if
self
.
option
.
tahun
:
q
=
q
.
filter_by
(
th_booking
=
self
.
option
.
tahun
)
if
self
.
option
.
min_nominal
:
q
=
q
.
filter
(
Invoice
.
bphtb_utg
>=
self
.
option
.
min_nominal
)
if
self
.
option
.
max_nominal
:
q
=
q
.
filter
(
Invoice
.
bphtb_utg
<=
self
.
option
.
max_nominal
)
return
q
.
order_by
(
Invoice
.
doc_id
.
desc
())
def
get_message
(
self
,
row
):
invoice_id
=
''
.
join
([
row
.
kd_ppat
,
row
.
th_booking
,
row
.
no_booking
])
inq
=
Inquiry
(
invoice_id
)
if
inq
.
total
<
1
:
return
total
=
thousand
(
inq
.
total
)
.
rjust
(
11
)
return
f
'{invoice_id} Rp {total}'
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