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 44dd7657
authored
May 04, 2024
by
Owo Sugiana
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
Tambah PBB H2H Only
1 parent
b65bcf77
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
109 additions
and
100 deletions
CHANGES.txt
payment_report/common.py
payment_report/pbb/only_h2h.py
pbb-h2h-only.ini
CHANGES.txt
View file @
44dd765
3.2 2024-05-04
--------------
- Tambah PBB H2H Only
3.1.3 2023-08-21
----------------
- Tambah PBB VA & QRIS Only
...
...
payment_report/common.py
View file @
44dd765
...
...
@@ -17,6 +17,7 @@ from sqlalchemy import (
BigInteger
,
ForeignKey
,
create_engine
,
func
,
)
from
sqlalchemy.orm
import
sessionmaker
import
transaction
...
...
@@ -343,14 +344,14 @@ class BaseApp:
else
:
msg
=
f
'INSERT {d}'
rpt
=
self
.
report_orm
(
**
source
)
msg
=
f
'{self.get_prefix_log()} {msg}'
log_method
=
log
.
info
except
InvalidSource
as
e
:
msg
=
str
(
e
)
log_method
=
log
.
warning
rpt
=
None
e
=
self
.
get_estimate
(
no
)
log_method
(
f
'#{no}/{self.count} {msg}, estimate {e}'
)
prefix
=
self
.
get_prefix_log
()
log_method
(
f
'#{no}/{self.count} {prefix} {msg}, estimate {e}'
)
if
rpt
:
session
=
self
.
get_session_for_save
()
with
transaction
.
manager
:
...
...
@@ -369,8 +370,13 @@ class BaseApp:
self
.
rpt_session
.
flush
()
self
.
rpt_session
.
expunge_all
()
def
get_count
(
self
):
# Override, please
pass
def
get_filter_query
(
self
,
q
):
# Override, please
return
q
def
get_count
(
self
):
q
=
self
.
prod_session
.
query
(
func
.
count
())
q
=
self
.
get_filter_query
(
q
)
return
q
.
scalar
()
def
prepare_query_filter
(
self
):
if
'tgl_awal'
in
self
.
conf
:
...
...
payment_report/pbb/only_h2h.py
View file @
44dd765
import
requests
from
sqlalchemy
import
func
import
transaction
from
opensipkd.waktu
import
dmyhms
from
opensipkd.string
import
FixLength
from
sismiop.services.base
import
INVOICE_ID
...
...
@@ -8,111 +5,88 @@ from opensipkd.iso8583.bjb.pbb.structure import (
PAYMENT_CODE
,
INVOICE_PROFILE
,
)
from
opensipkd.iso8583.bjb.models
import
Log
from
payment_report.scripts.tools
import
(
plain_values
,
update
,
)
from
payment_report.scripts.common
import
(
InvalidSource
,
from
opensipkd.iso8583.bjb.pbb.models
import
Log
from
..common
import
(
BaseApp
,
one_day
,
get_channel_name
_by_row
,
row_limit
,
get_channel_name
,
InvalidSource
,
)
from
..models
import
Pbb
class
Handler
:
def
__init__
(
self
,
parent
):
self
.
parent
=
parent
def
filter_tgl
(
self
,
q
):
q
=
q
.
filter
(
Log
.
created
>=
self
.
parent
.
tgl_awal
,
Log
.
created
<
self
.
parent
.
tgl_akhir
+
one_day
,
Log
.
bits
.
op
(
'->>'
)(
'3'
)
==
PAYMENT_CODE
,
Log
.
bits
.
op
(
'->>'
)(
'39'
)
==
'00'
)
return
q
.
filter_by
(
mti
=
'0210'
)
def
get_payment_query
(
self
):
q
=
self
.
parent
.
h2h_session
.
query
(
Log
)
return
self
.
filter_tgl
(
q
)
.
order_by
(
Log
.
id
)
def
get_count
(
self
):
# dipanggil parent
q
=
self
.
parent
.
h2h_session
.
query
(
func
.
count
(
Log
.
id
))
q
=
self
.
filter_tgl
(
q
)
return
q
.
scalar
()
def
get_last_time
(
self
):
# dipanggil parent
return
dmyhms
(
self
.
parent
.
last_pay
.
created
)
class
App
(
BaseApp
):
conf_name
=
'pbb payment last date'
report_orm
=
Pbb
va_product_code
=
'02'
def
get_report
(
self
,
pay
):
session
=
self
.
parent
.
get_session_for_save
()
q
=
session
.
query
(
self
.
parent
.
report_orm
)
.
filter_by
(
id
=
pay
.
id
)
def
get_before
(
self
,
r
):
q
=
self
.
rpt_session
.
query
(
Pbb
)
.
filter_by
(
kd_propinsi
=
r
[
'kd_propinsi'
],
kd_dati2
=
r
[
'kd_dati2'
],
kd_kecamatan
=
r
[
'kd_kecamatan'
],
kd_kelurahan
=
r
[
'kd_kelurahan'
],
kd_blok
=
r
[
'kd_blok'
],
no_urut
=
r
[
'no_urut'
],
kd_jns_op
=
r
[
'kd_jns_op'
],
thn_pajak_sppt
=
r
[
'thn_pajak_sppt'
])
q
=
q
.
filter
(
Pbb
.
id
<
r
[
'id'
])
q
=
q
.
order_by
(
Pbb
.
id
.
desc
())
return
q
.
first
()
def
create_data
(
self
,
pay
):
channel_nama
=
get_channel_name_by_row
(
pay
.
bits
)
channel_kode
=
pay
.
bits
[
'18'
]
or
'0000'
profile
=
pay
.
bits_data
[
'62'
]
def
create_data
(
self
,
log_iso
):
# Override
self
.
invoice_id
=
log_iso
.
bit_061
if
log_iso
.
mti
==
'0210'
and
log_iso
.
bit_039
!=
'00'
:
raise
InvalidSource
(
'payment gagal'
)
inv_id
=
FixLength
(
INVOICE_ID
)
inv_id
.
set_raw
(
pay
.
bits
[
'61'
])
return
dict
(
id
=
pay
.
id
,
kd_propinsi
=
inv_id
[
'Propinsi'
],
inv_id
.
set_raw
(
self
.
invoice_id
)
channel_nama
=
get_channel_name
(
log_iso
.
bit_018
,
log_iso
.
bit_032
,
log_iso
.
bit_041
,
log_iso
.
bit_042
,
log_iso
.
bit_043
)
channel_kode
=
log_iso
.
bit_018
or
'0000'
print
(
log_iso
.
id
)
r
=
dict
(
id
=
log_iso
.
id
,
kd_propinsi
=
inv_id
[
'Propinsi'
],
kd_dati2
=
inv_id
[
'Kabupaten'
],
kd_kecamatan
=
inv_id
[
'Kecamatan'
],
kd_kelurahan
=
inv_id
[
'Kelurahan'
],
kd_blok
=
inv_id
[
'Blok'
],
no_urut
=
inv_id
[
'Urut'
],
kd_jns_op
=
inv_id
[
'Jenis'
],
thn_pajak_sppt
=
inv_id
[
'Tahun'
],
pembayaran_sppt_ke
=
1
,
stan
=
pay
.
bits
[
'11'
],
ntb
=
pay
.
bits
[
'48'
],
jml_sppt_yg_dibayar
=
float
(
pay
.
bits
[
'4'
]),
stan
=
log_iso
.
bit_011
,
ntb
=
log_iso
.
bit_048
,
jml_sppt_yg_dibayar
=
float
(
log_iso
.
bit_004
),
channel_kode
=
channel_kode
,
channel_nama
=
channel_nama
,
bank_id
=
log_iso
.
bit_032
,
user_id
=
log_iso
.
bit_107
)
if
log_iso
.
mti
==
'0210'
:
profile
=
log_iso
.
bit_062_data
r
.
update
(
dict
(
tgl_pembayaran_sppt
=
log_iso
.
created
.
date
(),
tgl_rekam_byr_sppt
=
log_iso
.
created
,
denda_sppt
=
float
(
profile
[
'Denda'
]),
discount
=
float
(
profile
[
'Discount'
]),
tgl_pembayaran_sppt
=
pay
.
created
.
date
(),
tgl_rekam_byr_sppt
=
pay
.
created
,
nm_wp_sppt
=
profile
[
'Nama'
],
channel_kode
=
channel_kode
,
channel_nama
=
channel_nama
,
bank_id
=
pay
.
bits
[
'32'
],
user_id
=
pay
.
bits
[
'107'
],
pbb_yg_harus_dibayar_sppt
=
float
(
profile
[
'Tagihan'
]))
nm_wp_sppt
=
profile
[
'Nama'
],
pbb_yg_harus_dibayar_sppt
=
float
(
profile
[
'Tagihan'
])))
before
=
self
.
get_before
(
r
)
if
before
:
if
log_iso
.
mti
==
'0210'
:
r
[
'pembayaran_sppt_ke'
]
=
before
.
pembayaran_sppt_ke
+
1
else
:
# mti = 0400 = reversal
r
[
'id'
]
=
before
.
id
r
[
'tgl_batal'
]
=
log_iso
.
created
elif
log_iso
.
mti
==
'0400'
:
raise
InvalidSource
(
f
'ID {log_iso.id} tidak ada yang perlu dibatalkan'
)
return
r
def
get_report
(
self
,
log_iso
):
# Override
q
=
self
.
rpt_session
.
query
(
Pbb
)
.
filter_by
(
id
=
log_iso
.
id
)
return
q
.
first
()
def
get_last_time
(
self
):
# Override
return
dmyhms
(
self
.
last_pay
.
created
)
def
get_filter_query
(
self
,
q
):
# Override
return
q
.
filter
(
Log
.
created
>=
self
.
tgl_awal
,
Log
.
created
<
self
.
tgl_akhir
+
one_day
,
Log
.
bit_003
==
PAYMENT_CODE
,
Log
.
mti
.
in_
([
'0210'
,
'0400'
]))
def
update_from_date
(
self
):
q
=
self
.
get_payment_query
()
no
=
self
.
parent
.
offset
found
=
False
for
pay
in
q
.
offset
(
self
.
parent
.
offset
)
.
limit
(
row_limit
):
found
=
True
self
.
parent
.
invoice_id
=
pay
.
bits
[
'61'
]
.
strip
()
no
+=
1
try
:
source
=
self
.
create_data
(
pay
)
d
=
plain_values
(
source
)
rpt
=
self
.
get_report
(
pay
)
if
rpt
:
target
=
rpt
.
to_dict
()
target_update
,
log_msg
=
update
(
source
,
target
)
if
target_update
:
s
=
', '
.
join
(
log_msg
)
msg
=
f
'UPDATE {d} change {s}'
rpt
.
from_dict
(
target_update
)
else
:
msg
=
f
'ALREADY SAME {d}'
rpt
=
None
if
self
.
parent
.
count
==
1
and
self
.
parent
.
last
:
print
(
msg
)
print
(
'Log yang sama, abaikan.'
)
return
else
:
msg
=
f
'INSERT {d}'
rpt
=
self
.
parent
.
report_orm
(
**
source
)
msg
=
f
'{self.parent.get_prefix_log()} {msg}'
log_method
=
self
.
parent
.
log
.
info
except
InvalidSource
as
e
:
msg
=
str
(
e
)
log_method
=
self
.
parent
.
log
.
warning
rpt
=
None
e
=
self
.
parent
.
get_estimate
(
no
)
log_method
(
f
'#{no}/{self.parent.count} {msg}, estimate {e}'
)
if
rpt
:
session
=
self
.
parent
.
get_session_for_save
()
with
transaction
.
manager
:
session
.
add
(
rpt
)
self
.
parent
.
last_pay
=
pay
self
.
parent
.
offset
+=
row_limit
return
found
def
get_payment_query
(
self
):
# Override
q
=
self
.
prod_session
.
query
(
Log
)
q
=
self
.
get_filter_query
(
q
)
return
q
.
order_by
(
Log
.
created
)
pbb-h2h-only.ini
0 → 100644
View file @
44dd765
[main]
module
=
payment_report.pbb.only_h2h
db_url
=
postgresql://h2h:FIXME@localhost:5432/h2h
report_db_url
=
postgresql://pcpd:FIXME@localhost:5432/pcpd
pid_file
=
/home/pcpd/tmp/pbb-report.pid
[formatter_generic]
format
=
%(asctime)s %(levelname)s %(name)s %(message)s
[formatter_simple]
format
=
%(asctime)s %(levelname)s %(message)s
[handler_console]
class
=
StreamHandler
stream
=
sys.stdout
formatter
=
generic
[handler_file]
class
=
FileHandler
filename
=
/home/pcpd/logs/pbb-report.log
formatter
=
simple
[logger_root]
handlers
=
console, file
level
=
INFO
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