Commit 75b9afd9 by Solo Group

partner_log

1 parent 50ca428a
......@@ -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
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!