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 82a43b4d
authored
Apr 13, 2021
by
Owo Sugiana
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
Tambah models pada konfigurasi PBB
1 parent
2fc8c3bc
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
52 additions
and
41 deletions
CHANGES.txt
README.rst
contrib/alter-pbb.sql
payment_report/models.py
payment_report/scripts/common.py
payment_report/scripts/pbb.py
CHANGES.txt
View file @
82a43b4
0.1.2 13-4-2021
---------------
- Penambahan models pada konfigurasi PBB yang berisi nama modul untuk ORM Sppt
dan PembayaranSppt
- Penambahan field pada PBB
- Pada PBB field user_id boleh NULL
0.1.1 3-4-2021
--------------
...
...
README.rst
View file @
82a43b4
...
...
@@ -123,7 +123,8 @@ Berikan hak akses yang diperlukan user ``report``::
Lalu buat file konfigurasi bernama ``pbb.ini``::
[main]
module = opensipkd.iso8583.bjb.bphtb.default
module = opensipkd.iso8583.bjb.pbb.default
models = sismiop.models.default
db_url = postgresql://report:password@localhost:5434/pbb
report_db_url = postgresql://report:password@localhost:5434/payment_report
pid_file = /home/sugiana/tmp/pbb-report.pid
...
...
contrib/alter-pbb.sql
View file @
82a43b4
...
...
@@ -2,3 +2,4 @@ ALTER TABLE pbb_report ADD pbb_yg_harus_dibayar_sppt float;
ALTER
TABLE
pbb_report
ALTER
jml_sppt_yg_dibayar
TYPE
bigint
;
ALTER
TABLE
pbb_report
ADD
denda_sppt
bigint
;
ALTER
TABLE
pbb_report
ADD
tgl_inquiry
timestamp
with
time
zone
;
ALTER
TABLE
pbb_report
ALTER
user_id
DROP
NOT
NULL
;
payment_report/models.py
View file @
82a43b4
...
...
@@ -141,7 +141,7 @@ class Pbb(Base):
# Bit 41 / 42 / 43
channel_nama
=
Column
(
String
(
32
),
nullable
=
False
)
# Bit 107
user_id
=
Column
(
String
(
8
)
,
nullable
=
False
)
user_id
=
Column
(
String
(
8
))
tgl_batal
=
Column
(
DateTime
(
timezone
=
True
))
__table_args__
=
dict
(
UniqueConstraint
(
'stan'
,
'ntb'
),
...
...
payment_report/scripts/common.py
View file @
82a43b4
...
...
@@ -191,20 +191,21 @@ class BaseApp:
def
__init__
(
self
,
argv
):
self
.
option
=
get_option
(
argv
)
c
onf
=
ConfigParser
()
c
onf
.
read
(
self
.
option
.
conf
)
cf
=
conf
[
'main'
]
self
.
pid
=
make_pid_file
(
c
f
[
'pid_file'
])
c
p
=
ConfigParser
()
c
p
.
read
(
self
.
option
.
conf
)
self
.
conf
=
cp
[
'main'
]
self
.
pid
=
make_pid_file
(
self
.
con
f
[
'pid_file'
])
if
not
self
.
pid
:
return
self
.
log
=
create_log
(
c
f
[
'log_file'
])
module_name
=
c
f
[
'module'
]
self
.
log
=
create_log
(
self
.
con
f
[
'log_file'
])
module_name
=
self
.
con
f
[
'module'
]
self
.
module
=
get_module_object
(
module_name
)
module_conf
=
dict
(
c
f
)
module_conf
=
dict
(
self
.
con
f
)
self
.
module
.
init
(
module_conf
)
self
.
prod_session
=
self
.
get_db_session
()
self
.
prod_session
.
bind
.
echo
=
self
.
option
.
debug_sql
engine
=
create_engine
(
cf
[
'report_db_url'
],
echo
=
self
.
option
.
debug_sql
)
engine
=
create_engine
(
self
.
conf
[
'report_db_url'
],
echo
=
self
.
option
.
debug_sql
)
factory
=
sessionmaker
(
bind
=
engine
)
self
.
rpt_session
=
factory
()
register
(
self
.
rpt_session
)
...
...
payment_report/scripts/pbb.py
View file @
82a43b4
import
sys
from
ISO8583.ISO8583
import
BitNotSet
import
transaction
from
opensipkd.string
import
(
FixLength
,
...
...
@@ -8,16 +9,10 @@ from opensipkd.waktu import (
dmyhms
,
create_datetime
,
)
from
sismiop.models.default
import
(
Sppt
,
PembayaranSppt
,
)
from
sismiop.services.base
import
get_db_session
from
opensipkd.iso8583.bjb.scripts.common
import
get_module_object
from
opensipkd.iso8583.bjb.pbb
import
Doc
from
opensipkd.iso8583.bjb.pbb.structure
import
(
INVOICE_ID
,
INVOICE_PROFILE
,
)
from
opensipkd.iso8583.bjb.pbb.structure
import
INVOICE_PROFILE
from
..models
import
Pbb
from
.common
import
(
get_iso
,
...
...
@@ -30,12 +25,6 @@ ERR_NOT_FOUND = 'Tgl {tgl_bayar} SPPT ID {invoice_id} '\
'tidak ada di pembayaran_sppt'
def
get_inv_id
(
iso
):
inv_id
=
FixLength
(
INVOICE_ID
)
inv_id
.
set_raw
(
iso
.
get_invoice_id
())
return
inv_id
def
get_profile
(
iso
):
p
=
FixLength
(
INVOICE_PROFILE
)
p
.
set_raw
(
iso
.
get_invoice_profile
())
...
...
@@ -51,6 +40,13 @@ def get_tgl_bayar(iso, year):
int
(
t
[
'minute'
]),
int
(
t
[
'second'
]))
def
get_user_id
(
iso
):
try
:
return
iso
.
getBit
(
107
)
except
BitNotSet
:
return
class
App
(
BaseApp
):
iso_class
=
Doc
report_orm
=
Pbb
...
...
@@ -66,8 +62,11 @@ class App(BaseApp):
self
.
base_q_iso
=
self
.
prod_session
.
query
(
self
.
iso_payment_orm
,
self
.
iso_inquiry_orm
)
.
filter
(
self
.
iso_payment_orm
.
inquiry_id
==
self
.
iso_inquiry_orm
.
id
)
self
.
base_q_psppt
=
self
.
prod_session
.
query
(
PembayaranSppt
)
self
.
base_q_sppt
=
self
.
prod_session
.
query
(
Sppt
)
self
.
models
=
get_module_object
(
self
.
conf
[
'models'
])
self
.
PembayaranSppt
=
self
.
models
.
PembayaranSppt
self
.
Sppt
=
self
.
models
.
Sppt
self
.
base_q_psppt
=
self
.
prod_session
.
query
(
self
.
PembayaranSppt
)
self
.
base_q_sppt
=
self
.
prod_session
.
query
(
self
.
Sppt
)
def
get_db_session
(
self
):
# Override
return
get_db_session
()
...
...
@@ -82,7 +81,7 @@ class App(BaseApp):
no_urut
=
p
[
'Urut'
],
kd_jns_op
=
p
[
'Jenis'
],
thn_pajak_sppt
=
p
[
'Tahun'
])
.
order_by
(
PembayaranSppt
.
pembayaran_sppt_ke
.
desc
())
self
.
PembayaranSppt
.
pembayaran_sppt_ke
.
desc
())
return
q
.
first
()
def
get_sppt
(
self
,
p
):
...
...
@@ -97,10 +96,23 @@ class App(BaseApp):
thn_pajak_sppt
=
p
[
'Tahun'
])
return
q
.
first
()
def
__get_query_iso
(
self
,
last
):
q_iso
=
self
.
base_q_iso
.
filter
(
self
.
iso_inquiry_orm
.
id
>
last
.
as_int
())
return
q_iso
.
order_by
(
self
.
iso_inquiry_orm
.
id
)
def
__log_not_found
(
self
,
s_tgl
,
d
):
msg
=
ERR_NOT_FOUND
.
format
(
tgl_bayar
=
s_tgl
,
invoice_id
=
d
[
'nomor_bayar'
])
self
.
log
.
error
(
msg
)
def
__log_progress
(
self
,
s_tgl
,
d
):
self
.
log
.
info
(
f
'Tgl bayar {s_tgl}, Nomor bayar {d["nomor_bayar"]}, '
f
'STAN {d["stan"]}, NTB {d["ntb"]}, Channel {d["channel"]}'
)
def
__run_payment
(
self
):
last
=
self
.
get_last_id
(
'pbb payment last id'
)
q_iso
=
self
.
base_q_iso
.
filter
(
self
.
iso_inquiry_orm
.
id
>
last
.
as_int
())
q_iso
=
q_iso
.
order_by
(
self
.
iso_inquiry_orm
.
id
)
q_iso
=
self
.
__get_query_iso
(
last
)
found
=
False
for
row_pay
,
row_inq
in
q_iso
.
limit
(
1000
):
iso
=
get_iso
(
row_pay
.
iso_request
,
Doc
,
self
.
option
.
debug
)
...
...
@@ -112,15 +124,11 @@ class App(BaseApp):
p
=
get_profile
(
iso
)
psppt
=
self
.
get_psppt
(
p
)
if
not
psppt
:
msg
=
ERR_NOT_FOUND
.
format
(
tgl_bayar
=
s_tgl
,
invoice_id
=
d
[
'nomor_bayar'
])
self
.
log
.
error
(
msg
)
self
.
__log_not_found
(
s_tgl
,
d
)
continue
sppt
=
self
.
get_sppt
(
p
)
self
.
log
.
info
(
f
'Tgl bayar {s_tgl}, Nomor bayar {d["nomor_bayar"]}, '
f
'STAN {d["stan"]}, NTB {d["ntb"]}, Channel {d["channel"]}'
)
inv_id
=
get_inv_id
(
iso
)
self
.
__log_progress
(
s_tgl
,
d
)
user_id
=
get_user_id
(
iso
)
rpt
=
Pbb
(
stan
=
d
[
'stan'
],
ntb
=
d
[
'ntb'
],
kd_propinsi
=
p
[
'Propinsi'
],
kd_dati2
=
p
[
'Kabupaten'
],
kd_kecamatan
=
p
[
'Kecamatan'
],
...
...
@@ -131,15 +139,12 @@ class App(BaseApp):
jml_sppt_yg_dibayar
=
iso
.
get_amount
(),
denda_sppt
=
psppt
.
denda_sppt
,
tgl_pembayaran_sppt
=
tgl_bayar
.
date
(),
tgl_rekam_byr_sppt
=
tgl_bayar
,
nm_wp_sppt
=
p
[
'Nama'
],
tgl_rekam_byr_sppt
=
tgl_bayar
,
nm_wp_sppt
=
p
[
'Nama'
],
channel_kode
=
iso
.
get_channel
()
.
strip
(),
channel_nama
=
d
[
'channel'
],
user_id
=
iso
.
getBit
(
107
),
channel_nama
=
d
[
'channel'
],
user_id
=
user_id
,
pbb_yg_harus_dibayar_sppt
=
sppt
.
pbb_yg_harus_dibayar_sppt
,
tgl_inquiry
=
row_inq
.
tgl
)
last
.
nilai
=
str
(
row_inq
.
id
)
print
(
f
'last.nilai {last.nilai}'
)
with
transaction
.
manager
:
self
.
rpt_session
.
add
(
rpt
)
self
.
rpt_session
.
add
(
last
)
...
...
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