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