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
Hide 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
from
opensipkd.string
import
(
FixLength
,
DateTimeVar
,
to_str
,
)
from
opensipkd.waktu
import
(
dmyhms
,
...
...
@@ -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_day
=
timedelta
(
1
)
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
):
p
=
FixLength
(
INVOICE_PROFILE
)
...
...
@@ -84,6 +132,7 @@ class App(BaseApp):
self
.
Psppt
=
self
.
models
.
PembayaranSppt
self
.
Sppt
=
self
.
models
.
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
return
self
.
iso_reversal_orm
...
...
@@ -103,10 +152,9 @@ class App(BaseApp):
def
create_data
(
self
,
psppt
,
row_pay
,
iso
):
sppt
=
self
.
get_sppt
(
psppt
)
if
not
sppt
:
invoice_id
=
get_id
(
psppt
)
msg
=
ERR_SPPT_NOT_FOUND
.
format
(
invoice_id
=
invoice_id
)
self
.
log
.
error
(
msg
)
return
msg
=
log_psppt_msg
(
psppt
)
self
.
log
.
error
(
f
'{msg} tidak ada di tabel sppt'
)
raise
SpptNotFound
nama_wp
=
get_nama_wp
(
iso
,
sppt
)
bank_id
=
iso
and
iso
.
get_bank_id
()
or
None
user_id
=
iso
and
get_user_id
(
iso
)
or
None
...
...
@@ -124,8 +172,7 @@ class App(BaseApp):
bank_id
=
bank_id
,
user_id
=
user_id
,
pbb_yg_harus_dibayar_sppt
=
sppt
.
pbb_yg_harus_dibayar_sppt
)
def
get_iso_row
(
self
,
psppt
):
iso_pay
=
self
.
iso_payment_orm
def
get_iso_query
(
self
,
psppt
):
iso_inq
=
self
.
iso_inquiry_orm
q
=
self
.
base_q_iso
.
filter_by
(
propinsi
=
psppt
.
kd_propinsi
,
...
...
@@ -137,7 +184,14 @@ class App(BaseApp):
jenis
=
psppt
.
kd_jns_op
,
tahun
=
psppt
.
thn_pajak_sppt
,
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
()
def
get_channel
(
self
,
psppt
):
...
...
@@ -146,9 +200,16 @@ class App(BaseApp):
row_pay
,
row_inq
=
row_pay
iso
=
get_iso
(
row_pay
.
iso_request
,
Doc
,
self
.
option
.
debug
)
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
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
def
get_report
(
self
,
psppt
):
...
...
@@ -169,19 +230,19 @@ class App(BaseApp):
with
transaction
.
manager
:
self
.
rpt_session
.
add
(
self
.
last
)
def
__main_log_msg
(
self
,
no
,
psppt
,
d
):
invoice_id
=
get_id
(
psppt
)
tgl
=
psppt
.
tgl_rekam_byr_sppt
.
strftime
(
'
%
d-
%
m-
%
Y
%
H:
%
M:
%
S'
)
return
f
'#{no}/{self.count} '
\
f
'ID {invoice_id} ke {psppt.pembayaran_sppt_ke}, '
\
f
'Tgl bayar {tgl}, Channel {d["channel_nama"]}'
def
log_msg
(
self
,
no
,
psppt
,
iso
,
channel_nama
):
msg
=
log_psppt_msg
(
psppt
)
msg
=
f
'#{no}/{self.count} {msg}'
if
iso
:
s
=
log_iso_msg
(
iso
)
msg
=
f
'{msg}, {s}'
return
f
'{msg}, Channel {channel_nama}'
def
update_from_date
(
self
):
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_akhir
)
q
=
q
.
order_by
(
self
.
Psppt
.
tgl_rekam_byr_sppt
)
self
.
last_psppt
=
None
no
=
self
.
offset
found
=
False
for
psppt
in
q
.
offset
(
self
.
offset
)
.
limit
(
row_limit
):
...
...
@@ -189,27 +250,25 @@ class App(BaseApp):
no
+=
1
channel_nama
,
row_pay
,
row_inq
,
iso
=
self
.
get_channel
(
psppt
)
d
=
dict
(
channel_nama
=
channel_nama
)
if
iso
:
if
psppt
.
tgl_rekam_byr_sppt
.
date
()
!=
row_inq
.
tgl
.
date
():
raise
TglTidakSama
if
row_inq
:
d
[
'tgl_inquiry'
]
=
row_inq
.
tgl
msg
=
self
.
__main_log_msg
(
no
,
psppt
,
d
)
if
iso
:
msg
=
f
'{msg}, STAN {iso.get_stan()}, NTB {iso.get_ntb()}'
msg
=
self
.
log_msg
(
no
,
psppt
,
iso
,
channel_nama
)
if
not
psppt
.
jml_sppt_yg_dibayar
:
self
.
log
.
warning
(
f
'{msg}, field jml_sppt_yg_dibayar 0, abaikan'
)
continue
self
.
log
.
info
(
msg
)
data
=
self
.
create_data
(
psppt
,
row_pay
,
iso
)
d
.
update
(
data
)
rpt
=
self
.
get_report
(
psppt
)
if
rpt
:
method
=
'UPDATE'
rpt
.
from_dict
(
d
)
else
:
method
=
'INSERT'
pkeys
=
data_pkeys
(
psppt
)
d
.
update
(
pkeys
)
rpt
=
Pbb
(
**
d
)
self
.
log
.
info
(
f
'{msg}, {method}'
)
with
transaction
.
manager
:
self
.
rpt_session
.
add
(
rpt
)
self
.
last_psppt
=
psppt
...
...
@@ -223,6 +282,7 @@ class App(BaseApp):
return
q
.
scalar
()
def
run_payment
(
self
):
# Override
self
.
last_psppt
=
None
self
.
last
=
None
self
.
offset
=
0
if
self
.
option
.
update_from_id
:
...
...
@@ -240,13 +300,13 @@ class App(BaseApp):
else
:
self
.
last
=
self
.
get_last_id
(
'pbb payment last date'
)
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
()
while
True
:
found
=
self
.
update_from_date
()
if
not
found
:
break
if
self
.
last
:
if
self
.
last
_psppt
:
self
.
update_last
()
def
get_doc_for_reversal
(
self
,
row
):
...
...
pbb.ini
View file @
3bf5708
...
...
@@ -4,3 +4,4 @@ db_url = postgresql://user:pass@localhost/db
report_db_url
=
postgresql://user:pass@localhost/db
pid_file
=
/home/sugiana/tmp/pbb-report.pid
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