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 3bf57089
authored
May 19, 2022
by
Owo Sugiana
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
PBB mengenal channel POSPBB
1 parent
63779a0d
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
87 additions
and
26 deletions
payment_report/scripts/pbb.py
pbb.ini
payment_report/scripts/pbb.py
View file @
3bf5708
...
@@ -11,6 +11,7 @@ from sismiop.services.base import get_id
...
@@ -11,6 +11,7 @@ from sismiop.services.base import get_id
from
opensipkd.string
import
(
from
opensipkd.string
import
(
FixLength
,
FixLength
,
DateTimeVar
,
DateTimeVar
,
to_str
,
)
)
from
opensipkd.waktu
import
(
from
opensipkd.waktu
import
(
dmyhms
,
dmyhms
,
...
@@ -27,13 +28,60 @@ from .common import (
...
@@ -27,13 +28,60 @@ from .common import (
)
)
ERR_SPPT_NOT_FOUND
=
'SPPT ID {invoice_id} tidak ada di tabel sppt'
class
SpptNotFound
(
Exception
):
pass
one_second
=
timedelta
(
1
/
24
/
60
/
60
)
one_second
=
timedelta
(
1
/
24
/
60
/
60
)
one_day
=
timedelta
(
1
)
one_day
=
timedelta
(
1
)
row_limit
=
1000
row_limit
=
1000
log_psppt_fields
=
(
'tgl_rekam_byr_sppt'
,
'jml_sppt_yg_dibayar'
,
'nip_rekam_byr_sppt'
,
'kd_kanwil'
,
'kd_kantor'
,
'kd_tp'
)
log_iso_bits
=
[
(
4
,
int
),
(
11
,
str
),
(
48
,
str
)]
def
get_log_row
(
row
,
fieldnames
):
r
=
dict
()
for
fieldname
in
fieldnames
:
val
=
getattr
(
row
,
fieldname
)
if
isinstance
(
val
,
datetime
):
val
=
to_str
(
val
)
elif
isinstance
(
val
,
str
):
val
=
val
.
strip
()
r
[
fieldname
]
=
val
return
r
def
log_psppt_msg
(
psppt
):
invoice_id
=
get_id
(
psppt
)
log_psppt
=
get_log_row
(
psppt
,
log_psppt_fields
)
return
f
'ID {invoice_id} ke {psppt.pembayaran_sppt_ke}, '
\
f
'psppt {log_psppt}'
def
get_log_iso
(
iso
,
bits
):
r
=
dict
()
for
bit
,
f
in
bits
:
val
=
iso
.
getBit
(
bit
)
if
f
==
str
:
val
=
val
.
strip
()
else
:
val
=
f
(
val
)
r
[
bit
]
=
val
return
r
def
log_iso_msg
(
iso
):
r
=
get_log_iso
(
iso
,
log_iso_bits
)
return
f
'iso8583 {r}'
def
get_profile
(
iso
):
def
get_profile
(
iso
):
p
=
FixLength
(
INVOICE_PROFILE
)
p
=
FixLength
(
INVOICE_PROFILE
)
...
@@ -84,6 +132,7 @@ class App(BaseApp):
...
@@ -84,6 +132,7 @@ class App(BaseApp):
self
.
Psppt
=
self
.
models
.
PembayaranSppt
self
.
Psppt
=
self
.
models
.
PembayaranSppt
self
.
Sppt
=
self
.
models
.
Sppt
self
.
Sppt
=
self
.
models
.
Sppt
self
.
base_q_sppt
=
self
.
prod_session
.
query
(
self
.
Sppt
)
self
.
base_q_sppt
=
self
.
prod_session
.
query
(
self
.
Sppt
)
self
.
nip_pospbb
=
self
.
conf
[
'nip_pospbb'
]
def
get_iso_reversal_orm
(
self
):
# Override
def
get_iso_reversal_orm
(
self
):
# Override
return
self
.
iso_reversal_orm
return
self
.
iso_reversal_orm
...
@@ -103,10 +152,9 @@ class App(BaseApp):
...
@@ -103,10 +152,9 @@ class App(BaseApp):
def
create_data
(
self
,
psppt
,
row_pay
,
iso
):
def
create_data
(
self
,
psppt
,
row_pay
,
iso
):
sppt
=
self
.
get_sppt
(
psppt
)
sppt
=
self
.
get_sppt
(
psppt
)
if
not
sppt
:
if
not
sppt
:
invoice_id
=
get_id
(
psppt
)
msg
=
log_psppt_msg
(
psppt
)
msg
=
ERR_SPPT_NOT_FOUND
.
format
(
invoice_id
=
invoice_id
)
self
.
log
.
error
(
f
'{msg} tidak ada di tabel sppt'
)
self
.
log
.
error
(
msg
)
raise
SpptNotFound
return
nama_wp
=
get_nama_wp
(
iso
,
sppt
)
nama_wp
=
get_nama_wp
(
iso
,
sppt
)
bank_id
=
iso
and
iso
.
get_bank_id
()
or
None
bank_id
=
iso
and
iso
.
get_bank_id
()
or
None
user_id
=
iso
and
get_user_id
(
iso
)
or
None
user_id
=
iso
and
get_user_id
(
iso
)
or
None
...
@@ -124,8 +172,7 @@ class App(BaseApp):
...
@@ -124,8 +172,7 @@ class App(BaseApp):
bank_id
=
bank_id
,
user_id
=
user_id
,
bank_id
=
bank_id
,
user_id
=
user_id
,
pbb_yg_harus_dibayar_sppt
=
sppt
.
pbb_yg_harus_dibayar_sppt
)
pbb_yg_harus_dibayar_sppt
=
sppt
.
pbb_yg_harus_dibayar_sppt
)
def
get_iso_row
(
self
,
psppt
):
def
get_iso_query
(
self
,
psppt
):
iso_pay
=
self
.
iso_payment_orm
iso_inq
=
self
.
iso_inquiry_orm
iso_inq
=
self
.
iso_inquiry_orm
q
=
self
.
base_q_iso
.
filter_by
(
q
=
self
.
base_q_iso
.
filter_by
(
propinsi
=
psppt
.
kd_propinsi
,
propinsi
=
psppt
.
kd_propinsi
,
...
@@ -137,7 +184,14 @@ class App(BaseApp):
...
@@ -137,7 +184,14 @@ class App(BaseApp):
jenis
=
psppt
.
kd_jns_op
,
jenis
=
psppt
.
kd_jns_op
,
tahun
=
psppt
.
thn_pajak_sppt
,
tahun
=
psppt
.
thn_pajak_sppt
,
ke
=
psppt
.
pembayaran_sppt_ke
)
ke
=
psppt
.
pembayaran_sppt_ke
)
q
=
q
.
order_by
(
iso_inq
.
id
.
desc
())
return
q
.
order_by
(
iso_inq
.
id
.
desc
())
def
get_iso_row
(
self
,
psppt
):
iso_inq
=
self
.
iso_inquiry_orm
awal
=
psppt
.
tgl_rekam_byr_sppt
.
date
()
akhir
=
awal
+
one_day
q
=
self
.
get_iso_query
(
psppt
)
q
=
q
.
filter
(
iso_inq
.
tgl
>=
awal
,
iso_inq
.
tgl
<
akhir
)
return
q
.
first
()
return
q
.
first
()
def
get_channel
(
self
,
psppt
):
def
get_channel
(
self
,
psppt
):
...
@@ -146,9 +200,16 @@ class App(BaseApp):
...
@@ -146,9 +200,16 @@ class App(BaseApp):
row_pay
,
row_inq
=
row_pay
row_pay
,
row_inq
=
row_pay
iso
=
get_iso
(
row_pay
.
iso_request
,
Doc
,
self
.
option
.
debug
)
iso
=
get_iso
(
row_pay
.
iso_request
,
Doc
,
self
.
option
.
debug
)
info
=
get_channel_info_by_iso
(
iso
)
info
=
get_channel_info_by_iso
(
iso
)
if
psppt
.
tgl_rekam_byr_sppt
.
date
()
!=
row_inq
.
tgl
.
date
():
raise
TglTidakSama
return
info
[
'channel'
],
row_pay
,
row_inq
,
iso
return
info
[
'channel'
],
row_pay
,
row_inq
,
iso
elif
psppt
.
nip_rekam_byr_sppt
.
strip
()
==
self
.
nip_pospbb
:
return
'POSPBB'
,
None
,
None
,
None
q
=
self
.
get_iso_query
(
psppt
)
row
=
q
.
first
()
if
row
:
pay
,
inq
=
row
msg
=
log_psppt_msg
(
psppt
)
msg
=
f
'{msg}, iso8583 ada tapi tanggalnya beda yaitu {inq.tgl}'
self
.
log
.
warning
(
msg
)
return
'MANUAL'
,
None
,
None
,
None
return
'MANUAL'
,
None
,
None
,
None
def
get_report
(
self
,
psppt
):
def
get_report
(
self
,
psppt
):
...
@@ -169,19 +230,19 @@ class App(BaseApp):
...
@@ -169,19 +230,19 @@ class App(BaseApp):
with
transaction
.
manager
:
with
transaction
.
manager
:
self
.
rpt_session
.
add
(
self
.
last
)
self
.
rpt_session
.
add
(
self
.
last
)
def
__main_log_msg
(
self
,
no
,
psppt
,
d
):
def
log_msg
(
self
,
no
,
psppt
,
iso
,
channel_nama
):
invoice_id
=
get_id
(
psppt
)
msg
=
log_psppt_msg
(
psppt
)
tgl
=
psppt
.
tgl_rekam_byr_sppt
.
strftime
(
'
%
d-
%
m-
%
Y
%
H:
%
M:
%
S'
)
msg
=
f
'#{no}/{self.count} {msg}'
return
f
'#{no}/{self.count} '
\
if
iso
:
f
'ID {invoice_id} ke {psppt.pembayaran_sppt_ke}, '
\
s
=
log_iso_msg
(
iso
)
f
'Tgl bayar {tgl}, Channel {d["channel_nama"]}'
msg
=
f
'{msg}, {s}'
return
f
'{msg}, Channel {channel_nama}'
def
update_from_date
(
self
):
def
update_from_date
(
self
):
q
=
self
.
prod_session
.
query
(
self
.
Psppt
)
.
filter
(
q
=
self
.
prod_session
.
query
(
self
.
Psppt
)
.
filter
(
self
.
Psppt
.
tgl_rekam_byr_sppt
>
self
.
tgl_awal
,
self
.
Psppt
.
tgl_rekam_byr_sppt
>
self
.
tgl_awal
,
self
.
Psppt
.
tgl_rekam_byr_sppt
<
self
.
tgl_akhir
)
self
.
Psppt
.
tgl_rekam_byr_sppt
<
self
.
tgl_akhir
)
q
=
q
.
order_by
(
self
.
Psppt
.
tgl_rekam_byr_sppt
)
q
=
q
.
order_by
(
self
.
Psppt
.
tgl_rekam_byr_sppt
)
self
.
last_psppt
=
None
no
=
self
.
offset
no
=
self
.
offset
found
=
False
found
=
False
for
psppt
in
q
.
offset
(
self
.
offset
)
.
limit
(
row_limit
):
for
psppt
in
q
.
offset
(
self
.
offset
)
.
limit
(
row_limit
):
...
@@ -189,27 +250,25 @@ class App(BaseApp):
...
@@ -189,27 +250,25 @@ class App(BaseApp):
no
+=
1
no
+=
1
channel_nama
,
row_pay
,
row_inq
,
iso
=
self
.
get_channel
(
psppt
)
channel_nama
,
row_pay
,
row_inq
,
iso
=
self
.
get_channel
(
psppt
)
d
=
dict
(
channel_nama
=
channel_nama
)
d
=
dict
(
channel_nama
=
channel_nama
)
if
iso
:
if
row_inq
:
if
psppt
.
tgl_rekam_byr_sppt
.
date
()
!=
row_inq
.
tgl
.
date
():
raise
TglTidakSama
d
[
'tgl_inquiry'
]
=
row_inq
.
tgl
d
[
'tgl_inquiry'
]
=
row_inq
.
tgl
msg
=
self
.
__main_log_msg
(
no
,
psppt
,
d
)
msg
=
self
.
log_msg
(
no
,
psppt
,
iso
,
channel_nama
)
if
iso
:
msg
=
f
'{msg}, STAN {iso.get_stan()}, NTB {iso.get_ntb()}'
if
not
psppt
.
jml_sppt_yg_dibayar
:
if
not
psppt
.
jml_sppt_yg_dibayar
:
self
.
log
.
warning
(
self
.
log
.
warning
(
f
'{msg}, field jml_sppt_yg_dibayar 0, abaikan'
)
f
'{msg}, field jml_sppt_yg_dibayar 0, abaikan'
)
continue
continue
self
.
log
.
info
(
msg
)
data
=
self
.
create_data
(
psppt
,
row_pay
,
iso
)
data
=
self
.
create_data
(
psppt
,
row_pay
,
iso
)
d
.
update
(
data
)
d
.
update
(
data
)
rpt
=
self
.
get_report
(
psppt
)
rpt
=
self
.
get_report
(
psppt
)
if
rpt
:
if
rpt
:
method
=
'UPDATE'
rpt
.
from_dict
(
d
)
rpt
.
from_dict
(
d
)
else
:
else
:
method
=
'INSERT'
pkeys
=
data_pkeys
(
psppt
)
pkeys
=
data_pkeys
(
psppt
)
d
.
update
(
pkeys
)
d
.
update
(
pkeys
)
rpt
=
Pbb
(
**
d
)
rpt
=
Pbb
(
**
d
)
self
.
log
.
info
(
f
'{msg}, {method}'
)
with
transaction
.
manager
:
with
transaction
.
manager
:
self
.
rpt_session
.
add
(
rpt
)
self
.
rpt_session
.
add
(
rpt
)
self
.
last_psppt
=
psppt
self
.
last_psppt
=
psppt
...
@@ -223,6 +282,7 @@ class App(BaseApp):
...
@@ -223,6 +282,7 @@ class App(BaseApp):
return
q
.
scalar
()
return
q
.
scalar
()
def
run_payment
(
self
):
# Override
def
run_payment
(
self
):
# Override
self
.
last_psppt
=
None
self
.
last
=
None
self
.
last
=
None
self
.
offset
=
0
self
.
offset
=
0
if
self
.
option
.
update_from_id
:
if
self
.
option
.
update_from_id
:
...
@@ -240,13 +300,13 @@ class App(BaseApp):
...
@@ -240,13 +300,13 @@ class App(BaseApp):
else
:
else
:
self
.
last
=
self
.
get_last_id
(
'pbb payment last date'
)
self
.
last
=
self
.
get_last_id
(
'pbb payment last date'
)
self
.
tgl_awal
=
self
.
last
.
as_datetime
()
self
.
tgl_awal
=
self
.
last
.
as_datetime
()
self
.
tgl_akhir
=
date
.
today
()
+
one_day
()
self
.
tgl_akhir
=
date
.
today
()
+
one_day
self
.
count
=
self
.
get_count
()
self
.
count
=
self
.
get_count
()
while
True
:
while
True
:
found
=
self
.
update_from_date
()
found
=
self
.
update_from_date
()
if
not
found
:
if
not
found
:
break
break
if
self
.
last
:
if
self
.
last
_psppt
:
self
.
update_last
()
self
.
update_last
()
def
get_doc_for_reversal
(
self
,
row
):
def
get_doc_for_reversal
(
self
,
row
):
...
...
pbb.ini
View file @
3bf5708
...
@@ -4,3 +4,4 @@ db_url = postgresql://user:pass@localhost/db
...
@@ -4,3 +4,4 @@ db_url = postgresql://user:pass@localhost/db
report_db_url
=
postgresql://user:pass@localhost/db
report_db_url
=
postgresql://user:pass@localhost/db
pid_file
=
/home/sugiana/tmp/pbb-report.pid
pid_file
=
/home/sugiana/tmp/pbb-report.pid
log_file
=
/home/sugiana/log/pbb-report.log
log_file
=
/home/sugiana/log/pbb-report.log
nip_pospbb
=
888888888
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