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 75b9afd9
authored
Jul 25, 2019
by
Solo Group
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
partner_log
1 parent
50ca428a
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
53 additions
and
105 deletions
src/agratek/api/merchant/views/vendor.py
src/agratek/api/merchant/views/vendor.py
View file @
75b9afd
...
...
@@ -5,6 +5,9 @@ Invoice To Vendor
Invoice To Customer
"""
import
hashlib
import
json
import
logging
import
re
from
datetime
import
datetime
from
importlib
import
import_module
...
...
@@ -13,31 +16,32 @@ import colander
import
requests
import
xmltodict
from
deform
import
widget
,
Form
,
ValidationFailure
from
opensipkd.base.tools.api
import
JsonRpcParameterNotFound
from
opensipkd.pasar.models
import
PartnerLog
from
pyramid.httpexceptions
import
HTTPFound
from
pyramid.renderers
import
render_to_response
from
pyramid.view
import
view_config
import
json
from
.
import
BaseView
# , save_file_upload
from
..models
import
(
DBSession
,
flush_row
,
Partner
,
PartnerProduk
)
from
..models
import
(
Produk
,
ProdukCategory
)
from
..tools
import
(
btn_next
,
date_from_str
,
get_settings
,
btn_reset
,
btn_inquiry
,
btn_advice
,
btn_payment
,
get_random_number
)
btn_inquiry
,
btn_advice
,
btn_payment
)
log
=
logging
.
getLogger
(
__name__
)
def
vendor
():
return
DBSession
.
query
(
Partner
.
id
,
Partner
.
nama
)
\
return
DBSession
.
query
(
Partner
.
id
,
Partner
.
nama
)
\
.
filter
(
Partner
.
is_vendor
==
1
)
.
all
()
def
customer
():
return
DBSession
.
query
(
Partner
.
id
,
Partner
.
nama
)
\
return
DBSession
.
query
(
Partner
.
id
,
Partner
.
nama
)
\
.
filter
(
Partner
.
is_customer
==
1
)
.
all
()
def
produk
():
return
DBSession
.
query
(
Produk
.
id
,
Produk
.
nama
)
\
.
join
(
ProdukCategory
,
Produk
.
kategori_id
==
ProdukCategory
.
id
)
\
return
DBSession
.
query
(
Produk
.
id
,
Produk
.
nama
)
\
.
join
(
ProdukCategory
,
Produk
.
kategori_id
==
ProdukCategory
.
id
)
\
.
filter
(
ProdukCategory
.
kode
.
in_
([
'e-pulsa'
,
'e-voucher'
,
'e-payment'
]))
.
all
()
...
...
@@ -49,18 +53,18 @@ def build_request(typ, values):
cust_trx_id
=
'cust_trx_id'
in
values
and
values
[
'cust_trx_id'
]
or
None
vendor_product
=
PartnerProduk
.
query
()
\
.
join
(
Produk
,
PartnerProduk
.
produk_id
==
Produk
.
id
)
\
.
join
(
Produk
,
PartnerProduk
.
produk_id
==
Produk
.
id
)
\
.
filter
(
PartnerProduk
.
partner_id
==
vendor_id
,
PartnerProduk
.
produk_id
==
produk_id
)
.
first
()
if
not
vendor_product
:
return
dict
(
data
=
dict
(
error
=
'Data Tidak Ditemukan'
))
return
dict
(
data
=
dict
(
error
=
'Data Tidak Ditemukan'
))
row
=
None
if
"trx_id"
in
values
and
values
[
'trx_id'
]:
trx_id
=
int
(
values
[
'trx_id'
])
row
=
PartnerLog
.
query
()
.
filter_by
(
id
=
trx_id
)
.
first
()
modules
=
import_module
(
'.'
+
vendor_product
.
modules
,
'agratek.api.merchant.views'
)
modules
=
import_module
(
'.'
+
vendor_product
.
modules
,
'agratek.api.merchant.views'
)
cls_module
=
modules
.
Vendor
(
vendor_product
,
bill_no
,
customer_id
,
cust_trx_id
,
row
)
...
...
@@ -77,36 +81,6 @@ def build_request(typ, values):
code
=
9999
))
return
result
# if typ=='inquiry':
# data = cls_module.inquiry()
# result = dict(data=data)
# result["f_request"] = cls_module.request
# result["f_response"] = cls_module.response
# return result
#
# elif typ=='payment':
# data = cls_module.payment()
# result = dict(data=data)
# result["f_request"] = cls_module.request
# result["f_response"] = cls_module.response
# return result
#
# elif typ == 'advice':
# data = hasattr(cls_module, typ) and cls_module.advice() or None
# result = dict(data=data)
# result["f_request"] = cls_module.request
# result["f_response"] = cls_module.response
# return result
#
# elif typ == 'info':
# data = hasattr(cls_module, typ) and cls_module.info() or None
# result = dict(data=data)
# result["f_request"] = cls_module.request
# result["f_response"] = cls_module.reesponse
# return result
# else:
# return dict(error='Function %s tidak ditemukan' % typ)
@colander.deferred
def
deferred_vendor
(
node
,
kw
):
...
...
@@ -185,8 +159,8 @@ class AddSchema(colander.Schema):
widget
=
widget
.
TextAreaWidget
(
rows
=
10
,
css_class
=
"readonly"
)
)
class
EditSchema
(
AddSchema
):
class
EditSchema
(
AddSchema
):
id
=
colander
.
SchemaNode
(
colander
.
Integer
(),
title
=
'ID'
,
missing
=
colander
.
drop
,
...
...
@@ -209,7 +183,6 @@ def get_form(request, class_form, buttons=None, row=None):
return
Form
(
schema
,
buttons
=
buttons
)
def
route_list
(
request
):
return
HTTPFound
(
location
=
request
.
route_url
(
'simkel-permohonan'
))
...
...
@@ -232,7 +205,6 @@ def save(values, row):
return
row
def
save_request
(
request
,
values
,
row
=
None
):
values
[
'tgl_lahir'
]
=
date_from_str
(
values
[
'tgl_lahir'
])
values
[
'uid'
]
=
request
.
user
.
id
...
...
@@ -284,7 +256,6 @@ class ViewHome(BaseView):
request
=
self
.
req
session
=
self
.
ses
form
=
get_form
(
request
,
AddSchema
,
(
btn_inquiry
,
btn_payment
,
btn_advice
,
btn_next
))
# form_params = dict(scripts=None)
settings
=
get_settings
()
if
request
.
POST
:
controls
=
request
.
POST
.
items
()
...
...
@@ -295,10 +266,6 @@ class ViewHome(BaseView):
return
dict
(
form
=
form
,
params
=
form_params_edit
)
values
=
dict
(
c
.
items
())
# if 'trx_id' not in values or not values['trx_id']:
# values['trx_id'] = get_random_number(10)
# result = build_request('inquiry', values)
#
result
=
None
if
'inquiry'
in
request
.
POST
:
result
=
build_request
(
'inquiry'
,
values
)
...
...
@@ -309,19 +276,16 @@ class ViewHome(BaseView):
elif
'info'
in
request
.
POST
:
result
=
build_request
(
'info'
,
values
)
# if not result:
# session.flash('Data Tidak Ditemukan', 'error')
if
result
and
'data'
in
result
:
data
=
result
[
'data'
]
values
[
'f_request'
]
=
'f_request'
in
result
\
and
json
.
dumps
(
result
[
'f_request'
],
indent
=
4
)
or
''
values
[
'f_response'
]
=
'f_response'
in
result
\
and
json
.
dumps
(
result
[
'f_response'
],
indent
=
4
)
or
''
and
json
.
dumps
(
result
[
'f_response'
],
indent
=
4
)
or
''
values
[
'f_result'
]
=
'data'
in
result
\
and
json
.
dumps
(
result
[
'data'
],
indent
=
4
)
or
''
values
[
'ref_no'
]
=
'ref_no'
in
data
and
data
[
"ref_no"
]
or
""
and
json
.
dumps
(
result
[
'data'
],
indent
=
4
)
or
''
values
[
'ref_no'
]
=
'ref_no'
in
data
and
data
[
"ref_no"
]
or
""
values
[
'trx_id'
]
=
'trx_id'
in
data
and
data
[
'trx_id'
]
or
""
values
[
'vend_trx'
]
=
'vend_trx'
in
data
and
data
[
'vend_trx'
]
or
""
if
'error'
in
data
and
data
[
'error'
]:
...
...
@@ -332,25 +296,27 @@ class ViewHome(BaseView):
return
dict
(
form
=
form
,
params
=
form_params_edit
)
class
VendorClass
(
object
):
def
__init__
(
self
,
vendor_produk
,
bill_no
,
customer_id
=
None
,
cust_trx
=
None
,
row
=
None
):
"""
:param cid:
merupakan customer id seperti MSN dan atu id pelanggaan
:param vendor_produk:
:param bill_no:
:param customer_id:
:param cust_trx:
:param row:
"""
self
.
settings
=
get_settings
()
self
.
vendor_id
=
vendor_produk
.
partner_id
self
.
produk_id
=
vendor_produk
.
produk_id
self
.
v_produk_kd
=
vendor_produk
.
kode
self
.
kategori
=
vendor_produk
.
produk
.
kategori
.
nama
self
.
bill_no
=
bill_no
self
.
customer_id
=
customer_id
self
.
response
=
None
self
.
request
=
None
self
.
cust_trx
=
cust_trx
self
.
partner_log
=
row
self
.
partner_log_id
=
row
and
row
.
id
or
None
self
.
v_produk_kd
=
vendor_produk
.
kode
self
.
kategori
=
vendor_produk
.
produk
.
kategori
.
nama
self
.
status
=
row
and
row
.
status
or
0
self
.
amt_buy
=
row
and
row
.
amt_buy
or
0
...
...
@@ -358,6 +324,9 @@ class VendorClass(object):
self
.
cust_trx
=
row
and
row
.
cust_trx
or
""
self
.
vend_trx
=
row
and
row
.
vend_trx
or
""
self
.
response
=
None
self
.
request
=
None
def
save_log
(
self
,
typ
):
# if not self.partner_log:
row
=
self
.
partner_log
or
PartnerLog
()
...
...
@@ -373,16 +342,16 @@ class VendorClass(object):
row
.
amt_sell
=
self
.
amt_sell
if
typ
==
'inquiry'
:
row
.
inquiry
=
dict
(
request
=
self
.
request
,
response
=
self
.
response
)
response
=
self
.
response
)
elif
typ
==
'payment'
:
row
.
payment
=
dict
(
request
=
self
.
request
,
response
=
self
.
response
)
elif
typ
==
'advice'
:
row
.
advice
=
dict
(
request
=
self
.
request
,
response
=
self
.
response
)
response
=
self
.
response
)
elif
typ
==
'info'
:
row
.
info
=
dict
(
request
=
self
.
request
,
response
=
self
.
response
)
response
=
self
.
response
)
flush_row
(
row
)
self
.
partner_log
=
row
...
...
@@ -397,18 +366,17 @@ class VendorClass(object):
def
payment
(
self
):
pass
import
hashlib
def
sha256
(
hash_string
):
return
hashlib
.
sha256
(
hash_string
.
encode
())
.
hexdigest
()
return
hashlib
.
sha256
(
hash_string
.
encode
())
.
hexdigest
()
from
datetime
import
datetime
def
update_harga
(
p
,
k
,
v
):
row
=
PartnerProduk
.
query
()
\
row
=
PartnerProduk
.
query
()
\
.
filter_by
(
kode
=
k
,
partner_id
=
p
.
id
)
.
first
()
if
not
row
:
row
=
PartnerProduk
()
row
.
kode
=
k
row
.
kode
=
k
row
.
partner_id
=
p
.
id
row
.
created
=
datetime
.
now
()
else
:
...
...
@@ -417,8 +385,7 @@ def update_harga(p, k, v):
row
.
harga
=
v
flush_row
(
row
)
return
True
import
logging
log
=
logging
.
getLogger
(
__name__
)
def
proses_odeo
(
request
):
settings
=
get_settings
()
...
...
@@ -428,10 +395,10 @@ def proses_odeo(request):
partner
=
Partner
.
query_kode
(
"ODEO"
)
.
first
()
status
=
str
(
data
[
"status"
])
if
status
==
"BROADCAST_NEW_PRICE"
:
signature
=
sha256
(
"{mid}{key}{status}"
\
.
format
(
mid
=
mid
,
key
=
key
,
status
=
status
))
signature
=
sha256
(
"{mid}{key}{status}"
.
format
(
mid
=
mid
,
key
=
key
,
status
=
status
))
if
signature
!=
data
[
"signature"
]:
if
signature
!=
data
[
"signature"
]:
log
.
info
(
"Signature Vendor Different"
)
log
.
info
(
"local
%
s, vendor
%
s"
%
(
signature
,
data
[
"signature"
]))
return
dict
(
error
=
"Signature different"
)
...
...
@@ -444,16 +411,15 @@ def proses_odeo(request):
else
:
order_id
=
str
(
data
[
"order_id"
])
signature
=
sha256
(
"{order_id}{mid}{key}{status}"
\
.
format
(
order_id
=
order_id
,
mid
=
mid
,
key
=
key
,
status
=
status
))
signature
=
sha256
(
"{order_id}{mid}{key}{status}"
.
format
(
order_id
=
order_id
,
mid
=
mid
,
key
=
key
,
status
=
status
))
if
signature
!=
data
[
"signature"
]:
log
.
info
(
"Signature Vendor Different"
)
log
.
info
(
"local
%
s, vendor
%
s"
%
(
signature
,
data
[
"signature"
]))
return
dict
(
error
=
"Signature Different"
)
order
=
PartnerLog
.
query
()
\
.
filter
(
PartnerLog
.
vendor_id
==
partner
.
id
,
PartnerLog
.
vend_trx
==
str
(
order_id
))
.
first
()
order
=
PartnerLog
.
query
()
\
.
filter
(
PartnerLog
.
vendor_id
==
partner
.
id
,
PartnerLog
.
vend_trx
==
str
(
order_id
))
.
first
()
if
order
:
if
status
==
"COMPLETED"
:
...
...
@@ -465,37 +431,19 @@ def proses_odeo(request):
if
customer
and
customer
.
website
:
users
=
customer
.
users
url
=
customer
.
website
c_data
=
dict
(
trx_id
=
order
.
cust_trx
,
status
=
status
,
signature
=
sha256
(
users
.
user_name
+
users
.
api_key
))
c_data
=
dict
(
trx_id
=
order
.
cust_trx
,
status
=
status
,
signature
=
sha256
(
users
.
user_name
+
users
.
api_key
))
with
requests
.
session
():
requests
.
post
(
url
,
data
=
c_data
)
@view_config
(
route_name
=
'api-vendor-notify'
,
renderer
=
'json'
)
def
api_vendor_notify
(
request
):
vendor_nm
=
request
.
matchdict
[
'name'
]
if
vendor_nm
==
"odeo"
:
proses_odeo
(
request
)
# if partner:
# row = PartnerLog()
#
# if vendor_nm=='vsi':
# env = request.environ
# if not 'HTTP_SIGNATURE' in env:
# return JsonRpcParameterNotFound(message='SIGNATURE not found')
#
# row.log=env['HTTP_SIGNATURE']
# row.partner_id = partner.id
# flush_row(row)
# from pyramid_xmlrpc import XMLRPCView, xmlrpc_response
import
logging
log
=
logging
.
getLogger
(
__name__
)
@view_config
(
route_name
=
'api-vendor-test'
,
renderer
=
"string"
)
def
vendor_test
(
request
):
...
...
@@ -503,14 +451,14 @@ def vendor_test(request):
vendor
=
request
.
matchdict
[
'vendor'
]
result
=
dict
(
a
=
1
)
request
.
response
.
content_type
=
"text / xml"
if
vendor
==
"vsi"
:
if
vendor
==
"vsi"
:
controls
=
request
.
GET
.
items
()
params
=
dict
(
controls
)
params
[
"status"
]
=
"SUCCESS"
result
=
dict
(
root
=
params
)
result
=
xmltodict
.
unparse
(
result
)
elif
vendor
==
"odeoo"
:
params
=
json
.
loads
(
request
.
text
)
elif
vendor
==
"odeo"
:
params
=
json
.
loads
(
request
.
text
)
result
=
request
.
text
return
result
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