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
3.1.3 2023-08-21
----------------
----------------
- Tambah PBB VA & QRIS Only
- Tambah PBB VA & QRIS Only
...
...
payment_report/common.py
View file @
44dd765
...
@@ -17,6 +17,7 @@ from sqlalchemy import (
...
@@ -17,6 +17,7 @@ from sqlalchemy import (
BigInteger
,
BigInteger
,
ForeignKey
,
ForeignKey
,
create_engine
,
create_engine
,
func
,
)
)
from
sqlalchemy.orm
import
sessionmaker
from
sqlalchemy.orm
import
sessionmaker
import
transaction
import
transaction
...
@@ -343,14 +344,14 @@ class BaseApp:
...
@@ -343,14 +344,14 @@ class BaseApp:
else
:
else
:
msg
=
f
'INSERT {d}'
msg
=
f
'INSERT {d}'
rpt
=
self
.
report_orm
(
**
source
)
rpt
=
self
.
report_orm
(
**
source
)
msg
=
f
'{self.get_prefix_log()} {msg}'
log_method
=
log
.
info
log_method
=
log
.
info
except
InvalidSource
as
e
:
except
InvalidSource
as
e
:
msg
=
str
(
e
)
msg
=
str
(
e
)
log_method
=
log
.
warning
log_method
=
log
.
warning
rpt
=
None
rpt
=
None
e
=
self
.
get_estimate
(
no
)
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
:
if
rpt
:
session
=
self
.
get_session_for_save
()
session
=
self
.
get_session_for_save
()
with
transaction
.
manager
:
with
transaction
.
manager
:
...
@@ -369,8 +370,13 @@ class BaseApp:
...
@@ -369,8 +370,13 @@ class BaseApp:
self
.
rpt_session
.
flush
()
self
.
rpt_session
.
flush
()
self
.
rpt_session
.
expunge_all
()
self
.
rpt_session
.
expunge_all
()
def
get_count
(
self
):
# Override, please
def
get_filter_query
(
self
,
q
):
# Override, please
pass
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
):
def
prepare_query_filter
(
self
):
if
'tgl_awal'
in
self
.
conf
:
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.waktu
import
dmyhms
from
opensipkd.string
import
FixLength
from
opensipkd.string
import
FixLength
from
sismiop.services.base
import
INVOICE_ID
from
sismiop.services.base
import
INVOICE_ID
...
@@ -8,111 +5,88 @@ from opensipkd.iso8583.bjb.pbb.structure import (
...
@@ -8,111 +5,88 @@ from opensipkd.iso8583.bjb.pbb.structure import (
PAYMENT_CODE
,
PAYMENT_CODE
,
INVOICE_PROFILE
,
INVOICE_PROFILE
,
)
)
from
opensipkd.iso8583.bjb.models
import
Log
from
opensipkd.iso8583.bjb.pbb.models
import
Log
from
payment_report.scripts.tools
import
(
from
..common
import
(
plain_values
,
BaseApp
,
update
,
)
from
payment_report.scripts.common
import
(
InvalidSource
,
one_day
,
one_day
,
get_channel_name
_by_row
,
get_channel_name
,
row_limit
,
InvalidSource
,
)
)
from
..models
import
Pbb
class
Handler
:
class
App
(
BaseApp
):
def
__init__
(
self
,
parent
):
conf_name
=
'pbb payment last date'
self
.
parent
=
parent
report_orm
=
Pbb
va_product_code
=
'02'
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
)
def
get_report
(
self
,
pay
):
def
get_before
(
self
,
r
):
session
=
self
.
parent
.
get_session_for_save
()
q
=
self
.
rpt_session
.
query
(
Pbb
)
.
filter_by
(
q
=
session
.
query
(
self
.
parent
.
report_orm
)
.
filter_by
(
id
=
pay
.
id
)
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
()
return
q
.
first
()
def
create_data
(
self
,
pay
):
def
create_data
(
self
,
log_iso
):
# Override
channel_nama
=
get_channel_name_by_row
(
pay
.
bits
)
self
.
invoice_id
=
log_iso
.
bit_061
channel_kode
=
pay
.
bits
[
'18'
]
or
'0000'
if
log_iso
.
mti
==
'0210'
and
log_iso
.
bit_039
!=
'00'
:
profile
=
pay
.
bits_data
[
'62'
]
raise
InvalidSource
(
'payment gagal'
)
inv_id
=
FixLength
(
INVOICE_ID
)
inv_id
=
FixLength
(
INVOICE_ID
)
inv_id
.
set_raw
(
pay
.
bits
[
'61'
])
inv_id
.
set_raw
(
self
.
invoice_id
)
return
dict
(
channel_nama
=
get_channel_name
(
id
=
pay
.
id
,
kd_propinsi
=
inv_id
[
'Propinsi'
],
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_dati2
=
inv_id
[
'Kabupaten'
],
kd_kecamatan
=
inv_id
[
'Kecamatan'
],
kd_kelurahan
=
inv_id
[
'Kelurahan'
],
kd_blok
=
inv_id
[
'Blok'
],
kd_kelurahan
=
inv_id
[
'Kelurahan'
],
kd_blok
=
inv_id
[
'Blok'
],
no_urut
=
inv_id
[
'Urut'
],
kd_jns_op
=
inv_id
[
'Jenis'
],
no_urut
=
inv_id
[
'Urut'
],
kd_jns_op
=
inv_id
[
'Jenis'
],
thn_pajak_sppt
=
inv_id
[
'Tahun'
],
pembayaran_sppt_ke
=
1
,
thn_pajak_sppt
=
inv_id
[
'Tahun'
],
pembayaran_sppt_ke
=
1
,
stan
=
pay
.
bits
[
'11'
],
ntb
=
pay
.
bits
[
'48'
],
stan
=
log_iso
.
bit_011
,
ntb
=
log_iso
.
bit_048
,
jml_sppt_yg_dibayar
=
float
(
pay
.
bits
[
'4'
]),
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'
]),
denda_sppt
=
float
(
profile
[
'Denda'
]),
discount
=
float
(
profile
[
'Discount'
]),
discount
=
float
(
profile
[
'Discount'
]),
tgl_pembayaran_sppt
=
pay
.
created
.
date
(),
nm_wp_sppt
=
profile
[
'Nama'
],
tgl_rekam_byr_sppt
=
pay
.
created
,
nm_wp_sppt
=
profile
[
'Nama'
],
pbb_yg_harus_dibayar_sppt
=
float
(
profile
[
'Tagihan'
])))
channel_kode
=
channel_kode
,
channel_nama
=
channel_nama
,
before
=
self
.
get_before
(
r
)
bank_id
=
pay
.
bits
[
'32'
],
user_id
=
pay
.
bits
[
'107'
],
if
before
:
pbb_yg_harus_dibayar_sppt
=
float
(
profile
[
'Tagihan'
]))
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
):
def
get_payment_query
(
self
):
# Override
q
=
self
.
get_payment_query
()
q
=
self
.
prod_session
.
query
(
Log
)
no
=
self
.
parent
.
offset
q
=
self
.
get_filter_query
(
q
)
found
=
False
return
q
.
order_by
(
Log
.
created
)
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
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