Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
Kunto
/
backoffice
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 cfbd28d5
authored
Aug 25, 2019
by
aa.gusti
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
tangselpjk
1 parent
334fd32a
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
601 additions
and
342 deletions
src/agratek/api/merchant/views/api_merchant.py
src/agratek/api/merchant/views/produlk_vendor.py
src/agratek/api/merchant/views/tangselpay/pbb.py
src/agratek/api/merchant/views/tangselpay/TangselPay.pdf → src/agratek/api/merchant/views/tangselpjk/TangselPay.pdf
src/agratek/api/merchant/views/tangselpay/__init__.py → src/agratek/api/merchant/views/tangselpjk/__init__.py
src/agratek/api/merchant/views/tangselpjk/bphtb.py
src/agratek/api/merchant/views/tangselpjk/pbb.py
src/agratek/api/merchant/views/tangselpjk/pdl.py
src/agratek/api/merchant/views/tangselpay/tangsel.txt → src/agratek/api/merchant/views/tangselpjk/tangsel.txt
src/agratek/api/merchant/views/vendor.py
src/agratek/api/merchant/views/vendor_trx.py
src/agratek/api/merchant/views/api_merchant.py
View file @
cfbd28d
...
@@ -157,7 +157,7 @@ def inquiry(request, data, **kwargs):
...
@@ -157,7 +157,7 @@ def inquiry(request, data, **kwargs):
raise
JsonRpcError
(
message
=
result
[
"f_result"
][
"message"
])
raise
JsonRpcError
(
message
=
result
[
"f_result"
][
"message"
])
if
result
[
"f_result"
][
"code"
]
==
0
:
if
result
[
"f_result"
][
"code"
]
==
0
:
prod
.
update
(
result
)
prod
.
update
(
result
[
"f_result"
]
)
else
:
else
:
prod
.
update
(
dict
(
status
=
"FAILED"
,
prod
.
update
(
dict
(
status
=
"FAILED"
,
message
=
result
[
"message"
]))
message
=
result
[
"message"
]))
...
@@ -226,7 +226,6 @@ def purchase(request, data, **kwargs):
...
@@ -226,7 +226,6 @@ def purchase(request, data, **kwargs):
ar_invoice
=
H2hArInvoice
()
ar_invoice
=
H2hArInvoice
()
ar_invoice
.
customer_id
=
customer
.
id
ar_invoice
.
customer_id
=
customer
.
id
ar_invoice
.
cust_inv_no
=
inv_no
ar_invoice
.
cust_inv_no
=
inv_no
ar_invoice
.
cust_inv_no
=
inv_no
ar_invoice
.
payment
=
dict
(
request
=
dat
)
ar_invoice
.
payment
=
dict
(
request
=
dat
)
flush_row
(
ar_invoice
)
flush_row
(
ar_invoice
)
r_prod
=
[]
r_prod
=
[]
...
@@ -237,10 +236,7 @@ def purchase(request, data, **kwargs):
...
@@ -237,10 +236,7 @@ def purchase(request, data, **kwargs):
prod
[
"status"
]
=
"FAILED"
prod
[
"status"
]
=
"FAILED"
prod
[
"message"
]
=
"Denom atau id pelanggan tidak diisi"
prod
[
"message"
]
=
"Denom atau id pelanggan tidak diisi"
else
:
else
:
# produk = Produk.query_kode(produk_kd).first()
# todo: search product lowest price
vendor_produk
=
get_vendor_produk
(
produk_kd
)
vendor_produk
=
get_vendor_produk
(
produk_kd
)
if
not
vendor_produk
:
if
not
vendor_produk
:
prod
[
"status"
]
=
"FAILED"
prod
[
"status"
]
=
"FAILED"
prod
[
"message"
]
=
"Data tidak ditemukan"
prod
[
"message"
]
=
"Data tidak ditemukan"
...
@@ -254,17 +250,17 @@ def purchase(request, data, **kwargs):
...
@@ -254,17 +250,17 @@ def purchase(request, data, **kwargs):
flush_row
(
ar_invoice_det
)
flush_row
(
ar_invoice_det
)
result
=
build_purchase
(
vendor_produk
,
ar_invoice_det
)
result
=
build_purchase
(
vendor_produk
,
ar_invoice_det
)
total
=
"total"
in
result
and
result
[
"total"
]
or
0
total
=
"total"
in
result
and
result
[
"total"
]
or
0
prod
.
update
(
result
)
prod
.
update
(
result
[
"f_result"
]
)
# Perhitungan Total
#
#
Perhitungan Total
# Jika harga jual lebih besar dari harga beli jual dipakai harga jual
#
#
Jika harga jual lebih besar dari harga beli jual dipakai harga jual
# jika harga lebih kecil dari harga beli maka harga beli ditambah admin_fee
#
#
jika harga lebih kecil dari harga beli maka harga beli ditambah admin_fee
if
total
:
#
if total:
if
vendor_produk
.
produk
.
harga
<
total
:
#
if vendor_produk.produk.harga < total:
total
+=
vendor_produk
.
produk
.
harga
#
total += vendor_produk.produk.harga
elif
vendor_produk
.
produk
.
harga
>
total
:
#
elif vendor_produk.produk.harga > total:
total
=
vendor_produk
.
produk
.
harga
#
total = vendor_produk.produk.harga
prod
.
update
(
dict
(
total
=
total
))
#
prod.update(dict(total=total))
r_prod
.
append
(
prod
)
r_prod
.
append
(
prod
)
ar_invoice
.
payment
[
"response"
]
=
r_prod
ar_invoice
.
payment
[
"response"
]
=
r_prod
...
...
src/agratek/api/merchant/views/produlk_vendor.py
View file @
cfbd28d
...
@@ -138,14 +138,18 @@ class ViewData(BaseView):
...
@@ -138,14 +138,18 @@ class ViewData(BaseView):
params
=
{
'columns'
:
[
dict
(
title
=
"ID"
),
params
=
{
'columns'
:
[
dict
(
title
=
"ID"
),
dict
(
title
=
"Kode"
),
dict
(
title
=
"Kode"
),
dict
(
title
=
"Internal"
),
dict
(
title
=
"Internal"
),
dict
(
title
=
"Partner"
),
dict
(
title
=
"Harga"
),
dict
(
title
=
"Harga"
),
dict
(
title
=
"Discount"
),
dict
(
title
=
"Modules"
),
dict
(
title
=
"Modules"
),
dict
(
title
=
"Status"
),
dict
(
title
=
"Status"
),
],
],
'column_data'
:
[
dict
(
data
=
"id"
,
width
=
"0px"
),
'column_data'
:
[
dict
(
data
=
"id"
,
width
=
"0px"
),
dict
(
data
=
"kode"
,
width
=
"75px"
),
dict
(
data
=
"kode"
,
width
=
"75px"
),
dict
(
data
=
"internal"
),
dict
(
data
=
"internal"
),
dict
(
data
=
"partner"
),
dict
(
data
=
"harga"
),
dict
(
data
=
"harga"
),
dict
(
data
=
"discount"
),
dict
(
data
=
"modules"
),
dict
(
data
=
"modules"
),
dict
(
data
=
"status"
),
dict
(
data
=
"status"
),
],
],
...
@@ -201,12 +205,15 @@ class ViewData(BaseView):
...
@@ -201,12 +205,15 @@ class ViewData(BaseView):
ColumnDT
(
PartnerProduk
.
id
,
mData
=
'id'
),
ColumnDT
(
PartnerProduk
.
id
,
mData
=
'id'
),
ColumnDT
(
PartnerProduk
.
kode
,
mData
=
'kode'
),
ColumnDT
(
PartnerProduk
.
kode
,
mData
=
'kode'
),
ColumnDT
(
Produk
.
kode
,
mData
=
'internal'
),
ColumnDT
(
Produk
.
kode
,
mData
=
'internal'
),
ColumnDT
(
Partner
.
kode
,
mData
=
'partner'
),
ColumnDT
(
PartnerProduk
.
harga
,
mData
=
'harga'
),
ColumnDT
(
PartnerProduk
.
harga
,
mData
=
'harga'
),
ColumnDT
(
PartnerProduk
.
discount
,
mData
=
'discount'
),
ColumnDT
(
PartnerProduk
.
modules
,
mData
=
'modules'
),
ColumnDT
(
PartnerProduk
.
modules
,
mData
=
'modules'
),
ColumnDT
(
PartnerProduk
.
status
,
mData
=
'status'
),
ColumnDT
(
PartnerProduk
.
status
,
mData
=
'status'
),
]
]
query
=
DBSession
.
query
()
.
select_from
(
PartnerProduk
)
\
query
=
DBSession
.
query
()
.
select_from
(
PartnerProduk
)
\
.
join
(
Produk
,
PartnerProduk
.
produk_id
==
Produk
.
id
)
.
join
(
Produk
,
PartnerProduk
.
produk_id
==
Produk
.
id
)
\
.
join
(
Partner
,
PartnerProduk
.
partner_id
==
Partner
.
id
)
row_table
=
DataTables
(
request
.
GET
,
query
,
columns
)
row_table
=
DataTables
(
request
.
GET
,
query
,
columns
)
return
row_table
.
output_result
()
return
row_table
.
output_result
()
...
...
src/agratek/api/merchant/views/tangselpay/pbb.py
deleted
100644 → 0
View file @
334fd32
import
base64
import
json
from
time
import
sleep
import
requests
from
opensipkd.base
import
get_settings
from
opensipkd.base.tools.api
import
JsonRpcBillAllreadyPaidError
,
JsonRpcBillNotFoundError
from
opensipkd.pasar.models
import
PartnerProduk
,
H2hArInvoiceDet
from
pyramid_rpc.jsonrpc
import
JsonRpcError
from
..vendor
import
VendorClass
import
logging
log
=
logging
.
getLogger
(
__name__
)
import
urllib3
urllib3
.
disable_warnings
()
"""
PJDL
http://103.66.86.115:8989/interface-tangerang-1.0.0/pjdlJson/inq
http://103.66.86.115:8989/interface-tangerang-1.0.0/pjdlJson/pay
PBB
http://103.66.86.115:8989/interface-tangerang-1.0.0/pbbJson/inq
http://103.66.86.115:8989/interface-tangerang-1.0.0/pbbJson/pay
BPHTB
http://103.66.86.115:8989/interface-tangerang-1.0.0/bphtbJson/inq
http://103.66.86.115:8989/interface-tangerang-1.0.0/bphtbJson/pay
"""
class
Vendor
(
VendorClass
):
def
__init__
(
self
,
vendor_produk
,
invoice_det
):
VendorClass
.
__init__
(
self
,
vendor_produk
,
invoice_det
=
invoice_det
)
# id_pel, customer_id, cust_trx, row
settings
=
get_settings
()
self
.
mid
=
'tangselpay_mid'
in
settings
and
settings
[
'tangselpay_mid'
]
or
None
self
.
key
=
'tangselpay_key'
in
settings
and
settings
[
'tangselpay_key'
]
or
None
self
.
url
=
'tangselpay_url'
in
settings
and
settings
[
'tangselpay_url'
]
or
None
key
=
":"
.
join
([
self
.
mid
,
self
.
key
])
.
encode
()
self
.
auth
=
base64
.
b64encode
(
key
)
.
decode
()
self
.
inq_url
=
'{0}/pbbJson/inq'
.
format
(
self
.
url
)
self
.
pay_url
=
'{0}/pbbJson/pay'
.
format
(
self
.
url
)
def
get_headers
(
self
):
return
{
'Authorization'
:
'Bearer {key}'
.
format
(
key
=
self
.
auth
)}
def
get_url
(
self
,
url
=
None
):
return
url
and
self
.
url
+
url
or
self
.
url
def
inquiry_field
(
self
):
return
\
{
"oRef"
:
"000001"
,
"dateSettlement"
:
"0925"
,
"merchantType"
:
"6014"
,
"accountCurrency"
:
"360"
,
"terminalId"
:
"02W001"
,
"terminalName"
:
"Mobile POS Tangsel"
,
"terminalLoc"
:
"Tangerang Selatan"
,
"nop"
:
"3676060001000100010"
,
"tahunPajak"
:
"2019"
}
def
response_field
(
self
):
resp
=
self
.
response
if
resp
[
"responseCode"
]
==
"00"
:
# oRef
# dateSettlement
# merchantType
# accountCurrency
# terminalId
# terminalName
# terminalLoc
# nop
# tahunPajak
rincian
=
dict
(
alamat
=
resp
[
"lokasi"
],
kelurahaan
=
resp
[
"kelurahaan"
],
kecamatan
=
resp
[
"kecamatan"
],
provinsi
=
resp
[
"provinsi"
],
luas_bumi
=
resp
[
"luasTanah"
],
luas_bng
=
resp
[
"luasBangunan"
],
jatuh_tempo
=
resp
[
"tanggalJatuhTempo"
],
pokok
=
resp
[
"tagihan"
],
denda
=
resp
[
"denda"
],
sub_total
=
resp
[
"totalBayar"
],
admin
=
resp
[
"biayaAdmin"
],
code
=
resp
[
"responseCode"
],
message
=
resp
[
"responseDesc"
],
discount
=
resp
[
"discount"
])
self
.
amt_buy
=
rincian
[
"sub_total"
]
harga_pokok
=
rincian
[
"pokok"
]
+
rincian
[
"denda"
]
# denda = rincian["denda"]
admin
=
rincian
[
"admin"
]
product_id
=
self
.
invoice_det
.
produk
.
id
if
hasattr
(
self
.
invoice_det
,
"customer_id"
):
partner_id
=
self
.
invoice_det
.
customer_id
else
:
partner_id
=
self
.
invoice_det
.
h2h_ar_invoice
.
customer_id
discount
=
PartnerProduk
.
get_discount
(
partner_id
,
product_id
)
self
.
discount
=
discount
self
.
amt_sell
=
int
(
harga_pokok
)
+
admin
-
self
.
discount
result
=
{
"subtotal"
:
int
(
harga_pokok
),
"admin"
:
admin
,
"discount"
:
self
.
discount
,
"total"
:
self
.
amt_sell
,
'rincian'
:
rincian
}
return
result
else
:
code
=
int
(
resp
[
"responseCode"
])
message
=
resp
[
"responseDesc"
]
if
code
==
54
:
raise
JsonRpcBillAllreadyPaidError
()
elif
code
==
55
:
raise
JsonRpcBillNotFoundError
()
else
:
raise
JsonRpcError
(
code
=
code
,
message
=
message
)
def
inquiry
(
self
):
if
not
self
.
v_produk_kd
or
not
self
.
id_pel
:
return
self
.
set_response
(
message
=
'Parameter tidak lengkap'
)
self
.
request
=
self
.
inquiry_field
()
log
.
info
(
"Inquiry Request: url: {} params {}"
.
format
(
self
.
inq_url
,
self
.
request
))
self
.
save_log
(
"inquiry"
)
try
:
resp
=
requests
.
get
(
self
.
inq_url
,
params
=
self
.
request
,
verify
=
False
,
headers
=
self
.
get_headers
(),
timeout
=
15
)
except
:
return
self
.
set_response
(
message
=
"Biller Not Response"
)
if
not
resp
:
return
self
.
set_response
(
message
=
"Biller No Response"
)
try
:
result
=
json
.
loads
(
resp
.
text
)
except
:
result
=
resp
.
text
self
.
response
=
result
log
.
info
(
"Inquiry Response:
%
s"
%
self
.
response
)
if
resp
.
status_code
==
200
:
self
.
status
=
1
# sukses
parsd
=
self
.
response_field
()
if
parsd
:
parsd
.
update
(
code
=
0
,
message
=
"SUCCESS"
,
status
=
"SUCCESS"
)
else
:
self
.
status
=
-
1
parsd
=
None
return
self
.
set_failed
()
return
self
.
set_response
(
parsd
)
def
payment
(
self
):
inq
=
self
.
inquiry
()
params
=
self
.
response
try
:
resp
=
requests
.
post
(
self
.
inq_url
,
data
=
json
.
dumps
(
params
),
verify
=
False
,
headers
=
self
.
get_headers
(),
timeout
=
15
)
except
:
resp
=
None
if
resp
is
None
:
self
.
status
=
0
return
self
.
set_pending
(
parsd
)
# todo: dibuat seolah menjadi belum di transaksikan
# todo: membuat cron untuk melakukan pengecekan transaksi
try
:
result
=
json
.
loads
(
resp
.
text
)
self
.
response
=
result
log
.
info
(
"Payment Response:
%
s"
%
self
.
response
)
except
:
result
=
resp
.
text
self
.
response
=
result
log
.
info
(
"Payment Response:
%
s"
%
self
.
response
)
self
.
status
=
0
return
self
.
set_pending
(
parsd
)
if
resp
.
status_code
==
200
and
type
(
result
)
is
dict
:
# 0200
data
=
"data"
in
result
and
result
[
"data"
]
or
{}
if
not
data
:
self
.
status
=
0
return
self
.
set_pending
(
parsd
)
self
.
vend_inv_no
=
"order_id"
in
data
and
data
[
"order_id"
]
or
self
.
vend_inv_no
self
.
amt_buy
=
"price"
in
data
and
data
[
"price"
]
or
self
.
amt_buy
parsd
=
self
.
get_headers
self
.
serial_number
=
'serial_number'
in
data
and
data
[
"serial_numner"
]
\
or
self
.
serial_number
return
self
.
set_success
(
parsd
)
else
:
self
.
status
=
-
1
parsd
=
None
return
self
.
set_pending
(
parsd
)
def
advice
(
self
):
if
not
self
.
v_produk_kd
or
not
self
.
id_pel
or
not
self
.
invoice_det
:
return
dict
(
code
=
9999
,
message
=
'Parameter tidak lengkap'
)
if
self
.
kategori
==
'e-payment'
:
order_id
=
self
.
invoice_det
.
vend_inv_no
url
=
self
.
get_url
(
'/order/{order_id}'
.
format
(
order_id
=
order_id
))
params
=
None
self
.
request
=
url
else
:
params
=
dict
(
data
=
dict
(
denom
=
self
.
v_produk_kd
,
number
=
self
.
id_pel
)
)
self
.
request
=
params
url
=
self
.
get_url
(
'/prepaid/purchase-get'
)
self
.
save_log
(
"advice"
)
try
:
resp
=
requests
.
get
(
url
,
params
=
params
,
verify
=
False
,
headers
=
self
.
get_headers
(),
timeout
=
15
)
except
:
return
self
.
set_response
()
try
:
result
=
json
.
loads
(
resp
.
text
)
except
:
result
=
resp
.
text
self
.
response
=
result
if
resp
.
ok
:
self
.
status
=
1
# sukses
data
=
"data"
in
result
and
result
[
"data"
]
or
None
parsd
=
self
.
pars_data
(
data
)
elif
resp
.
status_code
==
400
:
self
.
status
=
-
3
parsd
=
dict
(
code
=
resp
.
status_code
,
message
=
resp
.
text
)
else
:
self
.
status
=
-
4
parsd
=
dict
(
code
=
500
,
message
=
"Other Error"
)
self
.
save_log
(
'advice'
)
return
parsd
src/agratek/api/merchant/views/tangselp
ay
/TangselPay.pdf
→
src/agratek/api/merchant/views/tangselp
jk
/TangselPay.pdf
View file @
cfbd28d
No preview for this file type
src/agratek/api/merchant/views/tangselp
ay
/__init__.py
→
src/agratek/api/merchant/views/tangselp
jk
/__init__.py
View file @
cfbd28d
File moved
src/agratek/api/merchant/views/tangselpjk/bphtb.py
0 → 100644
View file @
cfbd28d
This diff is collapsed.
Click to expand it.
src/agratek/api/merchant/views/tangselpjk/pbb.py
0 → 100644
View file @
cfbd28d
import
base64
import
json
from
time
import
sleep
from
datetime
import
datetime
import
requests
from
opensipkd.base
import
get_settings
from
opensipkd.base.tools
import
get_random_string
,
get_random_number
from
opensipkd.base.tools.api
import
JsonRpcBillAllreadyPaidError
,
JsonRpcBillNotFoundError
from
opensipkd.pasar.models
import
PartnerProduk
,
H2hArInvoiceDet
from
pyramid_rpc.jsonrpc
import
JsonRpcError
from
..vendor
import
VendorClass
import
logging
log
=
logging
.
getLogger
(
__name__
)
import
urllib3
urllib3
.
disable_warnings
()
"""
PJDL
http://103.66.86.115:8989/interface-tangerang-1.0.0/pjdlJson/inq
http://103.66.86.115:8989/interface-tangerang-1.0.0/pjdlJson/pay
PBB
http://103.66.86.115:8989/interface-tangerang-1.0.0/pbbJson/inq
http://103.66.86.115:8989/interface-tangerang-1.0.0/pbbJson/pay
BPHTB
http://103.66.86.115:8989/interface-tangerang-1.0.0/bphtbJson/inq
http://103.66.86.115:8989/interface-tangerang-1.0.0/bphtbJson/pay
"""
class
Vendor
(
VendorClass
):
def
__init__
(
self
,
vendor_produk
,
invoice_det
):
VendorClass
.
__init__
(
self
,
vendor_produk
,
invoice_det
=
invoice_det
)
# id_pel, customer_id, cust_trx, row
settings
=
get_settings
()
self
.
mid
=
'tangselpjk_mid'
in
settings
and
settings
[
'tangselpjk_mid'
]
or
None
self
.
key
=
'tangselpjk_key'
in
settings
and
settings
[
'tangselpjk_key'
]
or
None
self
.
url
=
'tangselpjk_url'
in
settings
and
settings
[
'tangselpjk_url'
]
or
None
key
=
":"
.
join
([
self
.
mid
,
self
.
key
])
.
encode
()
self
.
auth
=
base64
.
b64encode
(
key
)
.
decode
()
self
.
inq_url
=
'{0}/pbbJson/inq'
.
format
(
self
.
url
)
self
.
pay_url
=
'{0}/pbbJson/pay'
.
format
(
self
.
url
)
def
get_headers
(
self
):
return
{
'Content-Type'
:
'application/json'
}
def
get_url
(
self
,
url
=
None
):
return
url
and
self
.
url
+
url
or
self
.
url
def
inquiry_field
(
self
):
kini
=
datetime
.
now
()
date_settlement
=
kini
.
strftime
(
"
%
m
%
d"
)
nop
=
self
.
id_pel
[:
18
]
tahun
=
self
.
id_pel
[
-
4
:]
return
\
{
"noRef"
:
get_random_number
(
6
),
"dateSettlement"
:
date_settlement
,
"merchantType"
:
"6014"
,
"accountCurrency"
:
"360"
,
"terminalId"
:
"02W001"
,
"terminalName"
:
"Mobile POS Tangsel"
,
"terminalLoc"
:
"Tangerang Selatan"
,
"nop"
:
nop
,
"tahunPajak"
:
tahun
,
}
def
set_inquiry_error
(
self
,
resp
):
code
=
int
(
resp
[
"responseCode"
])
message
=
resp
[
"responseDesc"
]
if
code
==
54
:
raise
JsonRpcBillAllreadyPaidError
()
elif
code
==
55
:
raise
JsonRpcBillNotFoundError
()
else
:
raise
JsonRpcError
(
code
=
code
,
message
=
message
)
def
response_field
(
self
):
resp
=
self
.
response
if
resp
[
"responseCode"
]
==
"00"
:
pokok
=
int
(
resp
[
"tagihan"
]
or
'0'
)
denda
=
int
(
resp
[
"denda"
]
or
'0'
)
disc_biller
=
int
(
resp
[
"diskon"
]
or
'0'
)
sub_total
=
pokok
+
denda
-
disc_biller
result
=
self
.
get_price
(
sub_total
)
admin
=
int
(
self
.
vendor_produk
.
produk
.
harga
)
# todo: cek kembali harga apakah wajar atau tidak
# adm_biller = int(resp["diskon"] or '0')
# jika harga admin biller > dari admin
# if self.amt_buy < sub_total+adm_biller:
# raise
# if admin < adm_biller:
# admin = adm_biller
rincian
=
dict
(
pokok
=
pokok
,
denda
=
denda
,
discount
=
disc_biller
,
subtotal
=
sub_total
,
admin
=
admin
,
total
=
sub_total
+
admin
,
# code=resp["responseCode"],
# message=resp["responseDesc"],
nama
=
resp
[
"nama"
],
alamat
=
resp
[
"lokasi"
],
kelurahaan
=
resp
[
"kelurahaan"
],
kecamatan
=
resp
[
"kecamatan"
],
provinsi
=
resp
[
"provinsi"
],
luas_bumi
=
int
(
resp
[
"luasTanah"
]),
luas_bng
=
int
(
resp
[
"luasBangunan"
]),
jatuh_tempo
=
resp
[
"tanggalJatuhTempo"
],
)
result
.
update
(
dict
(
rincian
=
rincian
))
return
result
else
:
self
.
set_inquiry_error
(
resp
)
def
_inquiry
(
self
):
if
not
self
.
v_produk_kd
or
not
self
.
id_pel
:
return
self
.
set_response
(
message
=
'Parameter tidak lengkap'
)
self
.
request
=
self
.
inquiry_field
()
log
.
info
(
"Inquiry Request: url: {} params {}"
.
format
(
self
.
inq_url
,
self
.
request
))
self
.
save_log
(
"inquiry"
)
params
=
json
.
dumps
(
self
.
request
)
log
.
info
(
params
)
try
:
resp
=
requests
.
post
(
self
.
inq_url
,
data
=
params
,
verify
=
False
,
headers
=
self
.
get_headers
(),
timeout
=
20
)
except
:
log
.
info
(
"Biller Error"
)
return
if
not
resp
:
log
.
info
(
"No Response From Biller"
)
return
try
:
result
=
json
.
loads
(
resp
.
text
)
except
:
result
=
resp
.
text
self
.
response
=
result
log
.
info
(
"Inquiry Response:
%
s"
%
self
.
response
)
return
resp
def
inquiry
(
self
):
resp
=
self
.
_inquiry
()
if
resp
is
None
:
return
self
.
set_failed
(
typ
=
"inquiry"
)
if
resp
.
status_code
==
200
:
parsd
=
self
.
response_field
()
return
self
.
set_success
(
parsd
,
typ
=
"inquiry"
)
else
:
return
self
.
set_failed
(
typ
=
"inquiry"
)
def
payment
(
self
):
resp
=
self
.
_inquiry
()
if
resp
is
None
:
return
self
.
set_failed
()
if
self
.
response
[
"responseCode"
]
!=
"00"
:
self
.
set_inquiry_error
(
self
.
response
)
params
=
json
.
dumps
(
self
.
response
)
log
.
info
(
"Payment url: {} params: {}"
.
format
(
self
.
pay_url
,
params
))
try
:
resp
=
requests
.
post
(
self
.
pay_url
,
data
=
params
,
verify
=
False
,
headers
=
self
.
get_headers
(),
timeout
=
15
)
except
:
resp
=
None
if
resp
is
None
:
self
.
status
=
0
return
self
.
set_pending
()
try
:
result
=
json
.
loads
(
resp
.
text
)
self
.
response
=
result
log
.
info
(
"Payment Response:
%
s"
%
self
.
response
)
except
:
result
=
resp
.
text
self
.
response
=
result
log
.
info
(
"Payment Response:
%
s"
%
self
.
response
)
self
.
status
=
0
return
self
.
set_pending
()
if
resp
.
status_code
==
200
:
self
.
status
=
1
# sukses
parsd
=
self
.
response_field
()
self
.
serial_number
=
'ntb'
in
result
and
result
[
"ntb"
]
.
strip
()
\
or
self
.
serial_number
parsd
[
"rincian"
]
.
update
(
dict
(
ntb
=
self
.
serial_number
,
ntp
=
'ntp'
in
result
and
result
[
"ntp"
]
.
strip
()
or
''
))
return
self
.
set_success
(
parsd
)
else
:
self
.
status
=
0
return
self
.
set_pending
()
def
advice
(
self
):
raise
JsonRpcError
(
message
=
"Not Implemented"
)
# if not self.v_produk_kd or not self.id_pel or not self.invoice_det:
# return dict(code=9999,
# message='Parameter tidak lengkap')
#
# if self.kategori == 'e-payment':
# order_id = self.invoice_det.vend_inv_no
# url = self.get_url('/order/{order_id}'.format(order_id=order_id))
# params = None
# self.request = url
# else:
# params = dict(
# data=dict(
# denom=self.v_produk_kd,
# number=self.id_pel
# )
# )
# self.request = params
# url = self.get_url('/prepaid/purchase-get')
#
# self.save_log("advice")
# try:
# resp = requests.get(url, params=params, verify=False,
# headers=self.get_headers(), timeout=15)
# except:
# return self.set_response()
#
# try:
# result = json.loads(resp.text)
# except:
# result = resp.text
#
# self.response = result
# if resp.ok:
# self.status = 1 # sukses
# data = "data" in result and result["data"] or None
# parsd = self.pars_data(data)
#
# elif resp.status_code == 400:
# self.status = -3
# parsd = dict(code=resp.status_code,
# message=resp.text)
# else:
# self.status = -4
# parsd = dict(code=500,
# message="Other Error")
#
# self.save_log('advice')
# return parsd
src/agratek/api/merchant/views/tangselpjk/pdl.py
0 → 100644
View file @
cfbd28d
import
base64
import
json
import
re
from
time
import
sleep
from
datetime
import
datetime
import
requests
from
opensipkd.base
import
get_settings
from
opensipkd.base.tools
import
get_random_string
,
get_random_number
from
opensipkd.base.tools.api
import
JsonRpcBillAllreadyPaidError
,
JsonRpcBillNotFoundError
from
opensipkd.pasar.models
import
PartnerProduk
,
H2hArInvoiceDet
from
pyramid_rpc.jsonrpc
import
JsonRpcError
from
..vendor
import
VendorClass
import
logging
log
=
logging
.
getLogger
(
__name__
)
import
urllib3
urllib3
.
disable_warnings
()
"""
PJDL
http://103.66.86.115:8989/interface-tangerang-1.0.0/pjdlJson/inq
http://103.66.86.115:8989/interface-tangerang-1.0.0/pjdlJson/pay
PBB
http://103.66.86.115:8989/interface-tangerang-1.0.0/pbbJson/inq
http://103.66.86.115:8989/interface-tangerang-1.0.0/pbbJson/pay
BPHTB
http://103.66.86.115:8989/interface-tangerang-1.0.0/bphtbJson/inq
http://103.66.86.115:8989/interface-tangerang-1.0.0/bphtbJson/pay
"""
class
Vendor
(
VendorClass
):
def
__init__
(
self
,
vendor_produk
,
invoice_det
):
VendorClass
.
__init__
(
self
,
vendor_produk
,
invoice_det
=
invoice_det
)
# id_pel, customer_id, cust_trx, row
settings
=
get_settings
()
self
.
mid
=
'tangselpjk_mid'
in
settings
and
settings
[
'tangselpjk_mid'
]
or
None
self
.
key
=
'tangselpjk_key'
in
settings
and
settings
[
'tangselpjk_key'
]
or
None
self
.
url
=
'tangselpjk_url'
in
settings
and
settings
[
'tangselpjk_url'
]
or
None
key
=
":"
.
join
([
self
.
mid
,
self
.
key
])
.
encode
()
self
.
auth
=
base64
.
b64encode
(
key
)
.
decode
()
self
.
inq_url
=
'{0}/pjdlJson/inq'
.
format
(
self
.
url
)
self
.
pay_url
=
'{0}/pjdlJson/pay'
.
format
(
self
.
url
)
def
get_headers
(
self
):
return
{
'Content-Type'
:
'application/json'
}
def
get_url
(
self
,
url
=
None
):
return
url
and
self
.
url
+
url
or
self
.
url
def
inquiry_field
(
self
):
kini
=
datetime
.
now
()
date_settlement
=
kini
.
strftime
(
"
%
m
%
d"
)
no_bayar
=
self
.
id_pel
return
\
{
"noRef"
:
get_random_number
(
6
),
"dateSettlement"
:
date_settlement
,
"merchantType"
:
"6014"
,
"accountCurrency"
:
"360"
,
"terminalId"
:
"02W001"
,
"terminalName"
:
"Mobile POS Tangsel"
,
"terminalLoc"
:
"Tangerang Selatan"
,
"kodeBayar"
:
no_bayar
,
}
def
set_inquiry_error
(
self
,
resp
):
code
=
int
(
resp
[
"responseCode"
])
message
=
resp
[
"responseDesc"
]
if
code
==
54
:
raise
JsonRpcBillAllreadyPaidError
()
elif
code
==
55
:
raise
JsonRpcBillNotFoundError
()
else
:
raise
JsonRpcError
(
code
=
code
,
message
=
message
)
def
response_field
(
self
):
resp
=
self
.
response
if
resp
[
"responseCode"
]
==
"00"
:
pokok
=
int
(
resp
[
"billAmount"
]
or
'0'
)
denda
=
int
(
resp
[
"chargeAmount"
]
or
'0'
)
disc_biller
=
0
sub_total
=
pokok
+
denda
-
disc_biller
result
=
self
.
get_price
(
sub_total
)
admin
=
int
(
self
.
vendor_produk
.
produk
.
harga
)
# todo: cek kembali harga apakah wajar atau tidak
# adm_biller = int(resp["diskon"] or '0')
# jika harga admin biller > dari admin
# if self.amt_buy < sub_total+adm_biller:
# raise
# if admin < adm_biller:
# admin = adm_biller
rincian
=
dict
(
pokok
=
pokok
,
denda
=
denda
,
discount
=
disc_biller
,
subtotal
=
sub_total
,
admin
=
admin
,
total
=
sub_total
+
admin
,
npwp
=
resp
[
'npwpd'
],
nama
=
resp
[
'namaWp'
],
masa_awal
=
resp
[
'masaAwal'
],
masa_akhir
=
resp
[
'masaAkhir'
],
jns_pajak
=
resp
[
'jenisPajak'
],
kd_pajak
=
resp
[
'kodeRekening'
],
nm_pajal
=
resp
[
'namaRekening'
],
alamat1
=
resp
[
'alamat1'
],
alamat2
=
resp
[
'alamat2'
],
)
result
.
update
(
dict
(
rincian
=
rincian
))
return
result
else
:
self
.
set_inquiry_error
(
resp
)
def
_inquiry
(
self
):
if
not
self
.
v_produk_kd
or
not
self
.
id_pel
:
return
self
.
set_response
(
message
=
'Parameter tidak lengkap'
)
self
.
request
=
self
.
inquiry_field
()
log
.
info
(
"Inquiry Request: url: {} params {}"
.
format
(
self
.
inq_url
,
self
.
request
))
self
.
save_log
(
"inquiry"
)
params
=
json
.
dumps
(
self
.
request
)
log
.
info
(
params
)
try
:
resp
=
requests
.
post
(
self
.
inq_url
,
data
=
params
,
verify
=
False
,
headers
=
self
.
get_headers
(),
timeout
=
20
)
except
:
log
.
info
(
"Biller Error"
)
return
if
not
resp
:
log
.
info
(
"No Response From Biller"
)
return
try
:
result
=
json
.
loads
(
resp
.
text
)
except
:
result
=
resp
.
text
self
.
response
=
result
log
.
info
(
"Inquiry Response:
%
s"
%
self
.
response
)
return
resp
def
inquiry
(
self
):
resp
=
self
.
_inquiry
()
if
resp
is
None
:
return
self
.
set_failed
(
typ
=
"inquiry"
)
if
resp
.
status_code
==
200
:
parsd
=
self
.
response_field
()
return
self
.
set_success
(
parsd
,
typ
=
"inquiry"
)
else
:
return
self
.
set_failed
(
typ
=
"inquiry"
)
def
payment
(
self
):
resp
=
self
.
_inquiry
()
if
not
resp
:
return
self
.
set_failed
()
if
self
.
response
[
"responseCode"
]
!=
"00"
:
self
.
set_inquiry_error
(
self
.
response
)
params
=
json
.
dumps
(
self
.
response
)
log
.
info
(
"Payment url: {} params: {}"
.
format
(
self
.
pay_url
,
params
))
try
:
resp
=
requests
.
post
(
self
.
pay_url
,
data
=
params
,
verify
=
False
,
headers
=
self
.
get_headers
(),
timeout
=
15
)
except
:
resp
=
None
if
resp
is
None
:
self
.
status
=
0
return
self
.
set_pending
()
try
:
result
=
json
.
loads
(
resp
.
text
)
self
.
response
=
result
log
.
info
(
"Payment Response:
%
s"
%
self
.
response
)
except
:
result
=
resp
.
text
self
.
response
=
result
log
.
info
(
"Payment Response:
%
s"
%
self
.
response
)
self
.
status
=
0
return
self
.
set_pending
()
if
resp
.
status_code
==
200
:
self
.
status
=
1
# sukses
parsd
=
self
.
response_field
()
self
.
serial_number
=
'ntb'
in
result
and
result
[
"ntb"
]
.
strip
()
\
or
self
.
serial_number
parsd
[
"rincian"
]
.
update
(
dict
(
ntb
=
self
.
serial_number
,
ntp
=
'ntp'
in
result
and
result
[
"ntp"
]
.
strip
()
or
''
))
return
self
.
set_success
(
parsd
)
else
:
self
.
status
=
0
return
self
.
set_pending
()
def
advice
(
self
):
raise
JsonRpcError
(
message
=
"Not Implemented"
)
# if not self.v_produk_kd or not self.id_pel or not self.invoice_det:
# return dict(code=9999,
# message='Parameter tidak lengkap')
#
# if self.kategori == 'e-payment':
# order_id = self.invoice_det.vend_inv_no
# url = self.get_url('/order/{order_id}'.format(order_id=order_id))
# params = None
# self.request = url
# else:
# params = dict(
# data=dict(
# denom=self.v_produk_kd,
# number=self.id_pel
# )
# )
# self.request = params
# url = self.get_url('/prepaid/purchase-get')
#
# self.save_log("advice")
# try:
# resp = requests.get(url, params=params, verify=False,
# headers=self.get_headers(), timeout=15)
# except:
# return self.set_response()
#
# try:
# result = json.loads(resp.text)
# except:
# result = resp.text
#
# self.response = result
# if resp.ok:
# self.status = 1 # sukses
# data = "data" in result and result["data"] or None
# parsd = self.pars_data(data)
#
# elif resp.status_code == 400:
# self.status = -3
# parsd = dict(code=resp.status_code,
# message=resp.text)
# else:
# self.status = -4
# parsd = dict(code=500,
# message="Other Error")
#
# self.save_log('advice')
# return parsd
src/agratek/api/merchant/views/tangselp
ay
/tangsel.txt
→
src/agratek/api/merchant/views/tangselp
jk
/tangsel.txt
View file @
cfbd28d
File moved
src/agratek/api/merchant/views/vendor.py
View file @
cfbd28d
...
@@ -51,6 +51,8 @@ class VendorClass(object):
...
@@ -51,6 +51,8 @@ class VendorClass(object):
self
.
serial_number
=
invoice_det
and
hasattr
(
invoice_det
,
'serial_number'
)
\
self
.
serial_number
=
invoice_det
and
hasattr
(
invoice_det
,
'serial_number'
)
\
and
invoice_det
.
serial_number
or
None
and
invoice_det
.
serial_number
or
None
self
.
amt_buy
=
0
self
.
amt_buy
=
0
self
.
amt_sell
=
0
self
.
discount
=
0
def
set_response
(
self
,
data
=
None
,
message
=
None
,
code
=
999
,
typ
=
"inquiry"
):
def
set_response
(
self
,
data
=
None
,
message
=
None
,
code
=
999
,
typ
=
"inquiry"
):
if
not
data
and
message
:
if
not
data
and
message
:
...
@@ -63,17 +65,15 @@ class VendorClass(object):
...
@@ -63,17 +65,15 @@ class VendorClass(object):
log
.
info
(
"Result:
%
s"
%
data
)
log
.
info
(
"Result:
%
s"
%
data
)
return
data
return
data
def
set_success
(
self
,
data
=
None
):
def
set_success
(
self
,
data
=
None
,
typ
=
"payment"
):
self
.
status
=
1
self
.
status
=
1
typ
=
"payment"
data
=
data
and
data
or
{}
data
=
data
and
data
or
{}
data
.
update
(
dict
(
code
=
0
,
data
.
update
(
dict
(
code
=
0
,
message
=
"SUCCESS"
,
message
=
"SUCCESS"
,
status
=
"SUCCESS"
))
status
=
"SUCCESS"
))
return
self
.
set_response
(
data
,
typ
=
typ
)
return
self
.
set_response
(
data
,
typ
=
typ
)
def
set_failed
(
self
,
data
=
None
,
message
=
None
):
def
set_failed
(
self
,
data
=
None
,
message
=
None
,
typ
=
"payment"
):
typ
=
"payment"
self
.
status
=
-
3
self
.
status
=
-
3
data
=
data
and
data
or
{}
data
=
data
and
data
or
{}
message
=
message
and
message
or
"FAILED"
message
=
message
and
message
or
"FAILED"
...
@@ -82,9 +82,8 @@ class VendorClass(object):
...
@@ -82,9 +82,8 @@ class VendorClass(object):
status
=
"FAILED"
))
status
=
"FAILED"
))
return
self
.
set_response
(
data
,
typ
=
typ
)
return
self
.
set_response
(
data
,
typ
=
typ
)
def
set_double
(
self
,
data
=
None
,
message
=
None
):
def
set_double
(
self
,
data
=
None
,
message
=
None
,
typ
=
"payment"
):
self
.
status
=
-
3
self
.
status
=
-
3
typ
=
"payment"
message
=
message
and
message
or
"DOUBLE"
message
=
message
and
message
or
"DOUBLE"
data
=
data
and
data
or
{}
data
=
data
and
data
or
{}
data
.
update
(
dict
(
code
=
67
,
data
.
update
(
dict
(
code
=
67
,
...
@@ -92,9 +91,8 @@ class VendorClass(object):
...
@@ -92,9 +91,8 @@ class VendorClass(object):
status
=
"FAILED"
))
status
=
"FAILED"
))
return
self
.
set_response
(
data
,
typ
=
typ
)
return
self
.
set_response
(
data
,
typ
=
typ
)
def
set_pending
(
self
,
data
=
None
,
message
=
None
):
def
set_pending
(
self
,
data
=
None
,
message
=
None
,
typ
=
"payment"
):
data
=
data
and
data
or
{}
data
=
data
and
data
or
{}
typ
=
"payment"
message
=
message
and
message
or
"PENDING"
message
=
message
and
message
or
"PENDING"
data
.
update
(
dict
(
code
=
68
,
data
.
update
(
dict
(
code
=
68
,
status
=
"PENDING"
,
status
=
"PENDING"
,
...
@@ -102,15 +100,16 @@ class VendorClass(object):
...
@@ -102,15 +100,16 @@ class VendorClass(object):
)
)
return
self
.
set_response
(
data
,
typ
=
typ
)
return
self
.
set_response
(
data
,
typ
=
typ
)
def
get_price
(
self
):
def
get_price
(
self
,
pokok
=
0
):
product_id
=
self
.
invoice_det
.
produk
.
id
product_id
=
self
.
invoice_det
.
produk_id
self
.
amt_buy
=
pokok
+
self
.
vendor_produk
.
harga
if
hasattr
(
self
.
invoice_det
,
"customer_id"
):
if
hasattr
(
self
.
invoice_det
,
"customer_id"
):
partn
er_id
=
self
.
invoice_det
.
customer_id
custom
er_id
=
self
.
invoice_det
.
customer_id
else
:
else
:
partn
er_id
=
self
.
invoice_det
.
h2h_ar_invoice
.
customer_id
custom
er_id
=
self
.
invoice_det
.
h2h_ar_invoice
.
customer_id
harga
=
self
.
vendor_produk
.
produk
.
harga
harga
=
pokok
+
self
.
vendor_produk
.
produk
.
harga
self
.
discount
=
PartnerProduk
.
get_discount
(
partn
er_id
,
product_id
)
self
.
discount
=
PartnerProduk
.
get_discount
(
custom
er_id
,
product_id
)
self
.
amt_sell
=
harga
-
self
.
discount
self
.
amt_sell
=
harga
-
self
.
discount
return
dict
(
return
dict
(
subtotal
=
int
(
harga
),
subtotal
=
int
(
harga
),
...
@@ -119,18 +118,6 @@ class VendorClass(object):
...
@@ -119,18 +118,6 @@ class VendorClass(object):
)
)
def
save_log
(
self
,
typ
):
def
save_log
(
self
,
typ
):
# if not self.partner_log:
# row = self.partner_log or PartnerLog()
# row.vendor_id = self.vendor_id
# row.produk_id = self.produk_id
# row.bill_no = self.bill_no
# row.customer_id = self.customer_id
#
# row.cust_trx = self.cust_trx
# row.vend_trx = self.vend_trx
# row.status = self.status
# row.amt_buy = self.amt_buy
# row.amt_sell = self.amt_sell
self
.
invoice_det
.
status
=
self
.
status
self
.
invoice_det
.
status
=
self
.
status
if
hasattr
(
self
.
invoice_det
,
'serial_number'
):
if
hasattr
(
self
.
invoice_det
,
'serial_number'
):
self
.
invoice_det
.
serial_number
=
self
.
serial_number
self
.
invoice_det
.
serial_number
=
self
.
serial_number
...
@@ -141,6 +128,9 @@ class VendorClass(object):
...
@@ -141,6 +128,9 @@ class VendorClass(object):
if
self
.
amt_buy
:
if
self
.
amt_buy
:
self
.
invoice_det
.
amt_buy
=
self
.
amt_buy
self
.
invoice_det
.
amt_buy
=
self
.
amt_buy
if
self
.
amt_sell
:
self
.
invoice_det
.
amt_sell
=
self
.
amt_sell
if
typ
==
'inquiry'
:
if
typ
==
'inquiry'
:
self
.
invoice_det
.
inquiry
=
dict
(
request
=
self
.
request
,
self
.
invoice_det
.
inquiry
=
dict
(
request
=
self
.
request
,
response
=
self
.
response
,
response
=
self
.
response
,
...
@@ -161,44 +151,44 @@ class VendorClass(object):
...
@@ -161,44 +151,44 @@ class VendorClass(object):
flush_row
(
self
.
invoice_det
)
flush_row
(
self
.
invoice_det
)
class
Other
(
object
):
#
class Other(object):
def
__init_subclass__
(
self
,
**
kwargs
):
#
def __init_subclass__(self, **kwargs):
self
.
settings
=
get_settings
()
#
self.settings = get_settings()
vendor_produk
=
"vendor_produk"
in
kwargs
and
kwargs
[
"vendor_produk"
]
or
None
#
vendor_produk = "vendor_produk" in kwargs and kwargs["vendor_produk"] or None
self
.
vendor_id
=
vendor_produk
.
partner_id
#
self.vendor_id = vendor_produk.partner_id
self
.
produk_id
=
vendor_produk
.
produk_id
#
self.produk_id = vendor_produk.produk_id
self
.
v_produk_kd
=
vendor_produk
.
kode
#
self.v_produk_kd = vendor_produk.kode
self
.
produk_kd
=
vendor_produk
.
produk
.
kode
#
self.produk_kd = vendor_produk.produk.kode
self
.
kategori
=
vendor_produk
.
produk
.
kategori
.
nama
#
self.kategori = vendor_produk.produk.kategori.nama
values
=
"values"
in
kwargs
and
kwargs
[
"values"
]
or
None
#
values = "values" in kwargs and kwargs["values"] or None
# self.bill_no = bill_no
#
# self.bill_no = bill_no
self
.
customer_id
=
'customer_id'
in
values
and
values
[
'customer_id'
]
or
None
#
self.customer_id = 'customer_id' in values and values['customer_id'] or None
self
.
cust_trx
=
'cust_trx'
in
values
and
values
[
'cust_trx'
]
or
None
#
self.cust_trx = 'cust_trx' in values and values['cust_trx'] or None
row
=
'row'
in
values
and
values
[
'row'
]
or
None
#
row = 'row' in values and values['row'] or None
self
.
partner_log
=
row
#
self.partner_log = row
self
.
partner_log_id
=
row
and
row
.
id
or
None
#
self.partner_log_id = row and row.id or None
#
self
.
status
=
row
and
row
.
status
or
0
#
self.status = row and row.status or 0
self
.
amt_buy
=
row
and
row
.
amt_buy
or
0
#
self.amt_buy = row and row.amt_buy or 0
self
.
amt_sell
=
row
and
row
.
amt_sell
or
0
#
self.amt_sell = row and row.amt_sell or 0
self
.
cust_trx
=
row
and
row
.
cust_trx
or
""
#
self.cust_trx = row and row.cust_trx or ""
self
.
vend_trx
=
row
and
row
.
vend_trx
or
""
#
self.vend_trx = row and row.vend_trx or ""
#
self
.
response
=
None
#
self.response = None
self
.
request
=
None
#
self.request = None
#
# bill_no, customer_id = customer_id,
#
# bill_no, customer_id = customer_id,
# cust_trx_id = cust_trx_id, row = row,
#
# cust_trx_id = cust_trx_id, row = row,
#
#
#
#
def
get_product
(
self
):
#
def get_product(self):
pass
#
pass
#
def
inquiry
(
self
):
#
def inquiry(self):
pass
#
pass
#
def
payment
(
self
):
#
def payment(self):
pass
#
pass
def
sha256
(
hash_string
):
def
sha256
(
hash_string
):
...
...
src/agratek/api/merchant/views/vendor_trx.py
View file @
cfbd28d
...
@@ -160,6 +160,7 @@ def save_ar_invoice(values, vendor_produk):
...
@@ -160,6 +160,7 @@ def save_ar_invoice(values, vendor_produk):
flush_row
(
invoice_det
)
flush_row
(
invoice_det
)
return
invoice_det
return
invoice_det
class
ViewHome
(
BaseView
):
class
ViewHome
(
BaseView
):
@view_config
(
route_name
=
'api-vendor-doc'
,
@view_config
(
route_name
=
'api-vendor-doc'
,
permission
=
"api-vendor-doc"
,
permission
=
"api-vendor-doc"
,
...
...
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