Commit 75b9afd9 by Solo Group

partner_log

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