Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
Owo Sugiana
/
payment-report
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 31cb5a30
authored
Dec 28, 2022
by
Owo Sugiana
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
Tambah BPHTB Kabupaten Serang
1 parent
20c3d1d4
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
151 additions
and
12 deletions
CHANGES.txt
payment_report/scripts/bphtb.py
CHANGES.txt
View file @
31cb5a3
2.9 2022-12-28
--------------
- Tambah BPHTB Kabupaten Serang
2.8 2022-12-26
--------------
- Konfigurasi service bisa memuat class Handler untuk sumber data yang sangat
...
...
payment_report/scripts/bphtb.py
View file @
31cb5a3
...
...
@@ -15,6 +15,8 @@ from sqlalchemy.ext.declarative import declared_attr
from
sqlalchemy.exc
import
(
ProgrammingError
,
OperationalError
,
DatabaseError
,
NoReferencedTableError
,
)
from
opensipkd.string
import
FixLength
from
opensipkd.waktu
import
dmyhms
...
...
@@ -28,10 +30,12 @@ from opensipkd.bphtb.models.default import (
Perolehan
,
Customer
,
)
from
opensipkd.bphtb.structure
import
NOP
from
opensipkd.bphtb.services.default.structure
import
INVOICE_ID
from
iso8583_web.models.meta
import
Base
as
BaseConf
from
opensipkd.iso8583.bjb.bphtb
import
Doc
from
opensipkd.iso8583.bjb.bphtb.structure
import
PAYMENT_CODE
from
opensipkd.iso8583.bjb.models
import
Log
as
JsonLog
from
opensipkd.iso8583.bjb.bphtb.models
import
Log
from
..models
import
(
Base
,
...
...
@@ -40,6 +44,7 @@ from ..models import (
from
.common
import
(
get_iso
,
get_channel_name_by_row
,
get_channel_name
,
get_channel_info_by_iso
,
BaseApp
,
init_db
as
base_init_db
,
...
...
@@ -112,6 +117,11 @@ class SukabumiKotaLog(Base):
bit_062
=
Column
(
Text
)
def
cartenz_invoice_id
(
pay
):
return
pay
.
thn_bphtb
+
pay
.
bln_bphtb
+
pay
.
tgl_bphtb
+
\
pay
.
no_urut_bphtb
class
App
(
BaseApp
):
conf_name
=
'bphtb payment last date'
report_orm
=
Bphtb
...
...
@@ -125,23 +135,32 @@ class App(BaseApp):
self
.
is_sukabumi_kota
=
False
try
:
self
.
set_default_models
()
except
(
ProgrammingError
,
OperationalError
):
except
(
ProgrammingError
,
OperationalError
,
DatabaseError
):
self
.
prod_session
.
rollback
()
try
:
self
.
set_alternative_models
()
except
(
ProgrammingError
,
OperationalError
):
self
.
set_sukabumi_kota_models
()
except
(
ProgrammingError
,
OperationalError
,
NoReferencedTableError
):
try
:
self
.
set_sukabumi_kota_models
()
except
DatabaseError
:
self
.
set_cartenz_models
()
self
.
set_h2h_db
()
def
get_log_model
(
self
):
if
self
.
is_sukabumi_kota
:
return
SukabumiKotaLog
return
Log
return
self
.
is_json_log
and
JsonLog
or
Log
def
get_base_q_log
(
self
):
Log
=
self
.
get_log_model
()
return
self
.
h2h_session
.
query
(
Log
)
.
filter_by
(
mti
=
'0210'
,
bit_003
=
PAYMENT_CODE
,
bit_039
=
'00'
)
q
=
self
.
h2h_session
.
query
(
Log
)
.
filter_by
(
mti
=
'0210'
)
if
self
.
is_json_log
:
return
q
.
filter
(
Log
.
bits
.
op
(
'->>'
)(
'3'
)
==
PAYMENT_CODE
,
Log
.
bits
.
op
(
'->>'
)(
'39'
)
==
'00'
)
return
q
.
filter_by
(
bit_003
=
PAYMENT_CODE
,
bit_039
=
'00'
)
def
set_h2h_db
(
self
):
if
'h2h_db_url'
in
self
.
conf
:
...
...
@@ -149,6 +168,11 @@ class App(BaseApp):
self
.
h2h_session
=
factory
()
else
:
self
.
h2h_session
=
self
.
prod_session
try
:
self
.
h2h_session
.
query
(
JsonLog
.
bits
)
.
first
()
self
.
is_json_log
=
True
except
ProgrammingError
:
self
.
is_json_log
=
False
self
.
base_q_log
=
self
.
get_base_q_log
()
try
:
self
.
base_q_log
.
first
()
...
...
@@ -182,15 +206,41 @@ class App(BaseApp):
def
set_sukabumi_kota_models
(
self
):
from
opensipkd.bphtb.models.sukabumi_kota
import
Invoice
,
Payment
self
.
base_q_inv
=
self
.
prod_session
.
query
(
Invoice
)
self
.
base_q_inv
.
first
()
self
.
is_sukabumi_kota
=
True
self
.
Invoice
=
Invoice
self
.
Payment
=
Payment
self
.
base_q_inv
=
self
.
prod_session
.
query
(
self
.
Invoice
)
self
.
base_q_pay
=
self
.
prod_session
.
query
(
self
.
Payment
)
self
.
base_q_inv_kb
=
self
.
prod_session
.
query
(
Skbkb
)
self
.
base_q_inv_kbt
=
self
.
prod_session
.
query
(
Skbkbt
)
self
.
base_q_pay
=
self
.
prod_session
.
query
(
Payment
)
def
set_cartenz_models
(
self
):
from
opensipkd.bphtb.models.serang_kab
import
Payment
import
opensipkd.bphtb.services.base
from
opensipkd.bphtb.services.serang_kab
import
Inquiry
opensipkd
.
bphtb
.
services
.
base
.
DBSession
=
self
.
prod_session
self
.
is_cartenz
=
True
self
.
Payment
=
Payment
self
.
Inquiry
=
Inquiry
self
.
base_q_pay
=
self
.
prod_session
.
query
(
Payment
)
def
get_report_cartenz
(
self
,
pay
):
session
=
self
.
get_session_for_save
()
invoice_id
=
cartenz_invoice_id
(
pay
)
q
=
session
.
query
(
self
.
report_orm
)
.
filter_by
(
invoice_id
=
invoice_id
)
return
q
.
first
()
def
get_report
(
self
,
pay
):
# Override
if
self
.
is_cartenz
:
return
self
.
get_report_cartenz
(
pay
)
return
super
()
.
get_report
(
pay
)
def
get_last_time
(
self
):
# Override
if
self
.
is_sukabumi_kota
:
return
self
.
last_pay
.
tgl_rekam
.
strftime
(
'
%
d-
%
m-
%
Y
%
H:
%
M:
%
S'
)
if
self
.
is_cartenz
:
return
self
.
last_pay
.
tgl_rekam_byr
.
strftime
(
'
%
d-
%
m-
%
Y
%
H:
%
M:
%
S'
)
s_tgl
=
self
.
last_pay
.
tanggal
.
strftime
(
'
%
d-
%
m-
%
Y'
)
s_jam
=
self
.
last_pay
.
jam
.
strftime
(
'
%
H:
%
M:
%
S'
)
return
f
'{s_tgl} {s_jam}'
...
...
@@ -210,9 +260,16 @@ class App(BaseApp):
self
.
Payment
.
tgl_pembayaran
>=
self
.
tgl_awal
,
self
.
Payment
.
tgl_pembayaran
<
self
.
tgl_akhir
+
one_day
)
def
get_filter_query_cartenz
(
self
,
q
):
return
q
.
filter
(
self
.
Payment
.
tgl_rekam_byr
>=
self
.
tgl_awal
,
self
.
Payment
.
tgl_rekam_byr
<
self
.
tgl_akhir
+
one_day
)
def
get_count
(
self
)
->
int
:
# Override
if
self
.
is_sukabumi_kota
:
q
=
self
.
get_filter_query_sukabumi_kota
(
self
.
base_q_func
)
elif
self
.
is_cartenz
:
q
=
self
.
get_filter_query_cartenz
(
self
.
base_q_func
)
else
:
q
=
self
.
get_filter_query
(
self
.
base_q_func
)
return
q
.
scalar
()
...
...
@@ -221,6 +278,12 @@ class App(BaseApp):
if
self
.
is_sukabumi_kota
:
q
=
self
.
get_filter_query_sukabumi_kota
(
self
.
base_q_pay
)
return
q
.
order_by
(
self
.
Payment
.
tgl_pembayaran
,
self
.
Payment
.
id
)
if
self
.
is_cartenz
:
q
=
self
.
get_filter_query_cartenz
(
self
.
base_q_pay
)
return
q
.
order_by
(
self
.
Payment
.
tgl_rekam_byr
,
self
.
Payment
.
thn_bphtb
,
self
.
Payment
.
bln_bphtb
,
self
.
Payment
.
tgl_bphtb
,
self
.
Payment
.
no_urut_bphtb
)
q
=
self
.
get_filter_query
(
self
.
base_q_pay
)
return
q
.
order_by
(
self
.
Payment
.
tanggal
,
self
.
Payment
.
jam
)
...
...
@@ -241,14 +304,50 @@ class App(BaseApp):
if
not
self
.
base_q_log
:
return
Log
=
self
.
get_log_model
()
q
=
self
.
base_q_log
.
filter
(
func
.
trim
(
Log
.
bit_062
)
==
self
.
invoice_id
)
if
self
.
is_json_log
:
q
=
self
.
base_q_log
.
filter
(
func
.
trim
(
Log
.
bits
.
op
(
'->>'
)(
'62'
))
==
self
.
invoice_id
)
else
:
q
=
self
.
base_q_log
.
filter
(
func
.
trim
(
Log
.
bit_062
)
==
self
.
invoice_id
)
q
=
q
.
order_by
(
Log
.
id
.
desc
())
row
=
q
.
first
()
if
not
row
:
return
channel_id
=
row
.
bit_018
.
strip
()
channel_nama
=
get_channel_name_by_row
(
row
)
return
channel_id
,
channel_nama
,
row
.
bit_011
,
row
.
bit_058
.
strip
()
if
self
.
is_json_log
:
channel_id
=
row
.
bits
[
'18'
]
.
strip
()
stan
=
row
.
bits
[
'11'
]
ntb
=
row
.
bits
[
'58'
]
.
strip
()
channel_name
=
get_channel_name
(
row
.
bits
[
'18'
],
row
.
bits
[
'32'
],
row
.
bits
[
'41'
],
row
.
bits
[
'42'
],
row
.
bits
[
'43'
])
else
:
channel_id
=
row
.
bit_018
.
strip
()
stan
=
row
.
bit_011
ntb
=
row
.
bit_058
.
strip
()
channel_name
=
get_channel_name_by_row
(
row
)
return
channel_id
,
channel_name
,
stan
,
ntb
def
get_invoice_cartenz
(
self
,
pay
):
if
pay
.
no_transaksi_byr
in
(
'KB'
,
'KBT'
):
if
pay
.
no_transaksi_byr
==
'KB'
:
q
=
self
.
base_q_inv_kb
else
:
q
=
self
.
base_q_inv_kbt
q
=
q
.
filter_by
(
thn_bphtb_terbit
=
pay
.
thn_bphtb
,
bln_bphtb_terbit
=
pay
.
bln_bphtb
,
tgl_bphtb_terbit
=
pay
.
tgl_bphtb
,
no_urut_bphtb_terbit
=
pay
.
no_urut_bphtb
)
row
=
q
.
first
()
else
:
row
=
pay
q
=
self
.
base_q_inv
.
filter_by
(
thn_bphtb
=
row
.
thn_bphtb
,
bln_bphtb
=
row
.
bln_bphtb
,
tgl_bphtb
=
row
.
tgl_bphtb
,
no_urut_bphtb
=
row
.
no_urut_bphtb
)
return
q
.
first
()
def
get_invoice
(
self
,
pay
):
if
self
.
is_sukabumi_kota
:
...
...
@@ -288,9 +387,45 @@ class App(BaseApp):
jenis_perolehan
=
str
(
inv
.
jns_perolehan_hak
),
ppat
=
inv
.
nama_notaris
,
channel_id
=
channel_id
,
channel_nama
=
channel_nama
)
def
create_data_cartenz
(
self
,
pay
):
self
.
invoice_id
=
cartenz_invoice_id
(
pay
)
inq
=
self
.
Inquiry
(
self
.
invoice_id
,
None
,
for_test
=
True
)
if
not
inq
.
invoice
:
msg
=
f
'Invoice ID {self.invoice_id} tidak ditemukan'
raise
InvalidSource
(
msg
)
source
=
self
.
get_iso_v2
()
if
source
:
channel_id
,
channel_nama
,
stan
,
ntb
=
source
else
:
stan
=
ntb
=
None
channel_id
=
'0000'
channel_nama
=
'MANUAL'
inv
=
inq
.
invoice
nop_struct
=
FixLength
(
NOP
)
nop_struct
.
from_dict
({
'Propinsi'
:
inv
.
kd_propinsi
,
'Kabupaten'
:
inv
.
kd_dati2
,
'Kecamatan'
:
inv
.
kd_kecamatan_op
,
'Kelurahan'
:
inv
.
kd_kelurahan_op
,
'Blok'
:
inv
.
kd_blok_op
,
'Urut'
:
inv
.
no_urut_op
,
'Jenis'
:
inv
.
kd_jns_op
})
nop
=
nop_struct
.
get_raw
()
return
dict
(
stan
=
stan
,
ntb
=
ntb
,
tgl
=
pay
.
tgl_rekam_byr
.
date
(),
jam
=
pay
.
tgl_rekam_byr
.
time
(),
invoice_id
=
self
.
invoice_id
,
nop
=
nop
,
wp_nama
=
inq
.
get_nama
(),
wp_alamat
=
inq
.
get_alamat_wp
(),
op_alamat
=
inq
.
get_alamat_op
(),
npop
=
inq
.
get_npop
(),
bumi_luas
=
inq
.
get_luas_tanah
(),
bng_luas
=
inq
.
get_luas_bangunan
(),
nilai_bphtb
=
pay
.
bphtb_sdh_dibayar
,
jenis_perolehan
=
inv
.
kd_jns_hak
,
ppat
=
inq
.
get_nama_notaris
(),
channel_id
=
channel_id
,
channel_nama
=
channel_nama
)
def
create_data
(
self
,
pay
):
# Override
if
self
.
is_sukabumi_kota
:
return
self
.
create_data_sukabumi_kota
(
pay
)
if
self
.
is_cartenz
:
return
self
.
create_data_cartenz
(
pay
)
if
not
pay
.
sspd_id
:
msg
=
'Field bphtb_bank.sspd_id NULL'
raise
InvalidSource
(
msg
)
...
...
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