Commit ed7bdb93 by Solo Group

advice

1 parent e57ca22c
...@@ -5,7 +5,7 @@ from opensipkd.base.tools.api import (auth_from_rpc, ...@@ -5,7 +5,7 @@ from opensipkd.base.tools.api import (auth_from_rpc,
JsonRpcProdukNotFoundError, JsonRpcCustomerNotFoundError, JsonRpcProdukNotFoundError, JsonRpcCustomerNotFoundError,
JsonRpcParameterNotFound) JsonRpcParameterNotFound)
from opensipkd.pasar.models import Produk, PartnerProduk from opensipkd.pasar.models import Produk, PartnerProduk
from opensipkd.pasar.models.produk import H2hArInvoice, H2hArInvoiceDet, PartnerLog from opensipkd.pasar.models.produk import H2hArInvoice, H2hArInvoiceDet, PartnerLog, PartnerPay
from pyramid_rpc.jsonrpc import jsonrpc_method from pyramid_rpc.jsonrpc import jsonrpc_method
from ..tools import JsonRpcInvoiceFoundError, JsonRpcError from ..tools import JsonRpcInvoiceFoundError, JsonRpcError
...@@ -256,52 +256,47 @@ def purchase(request, data, **kwargs): ...@@ -256,52 +256,47 @@ def purchase(request, data, **kwargs):
return data return data
@jsonrpc_method(method='advice', endpoint='api-merchant') def payment_advice(dat):
def advice(request, data): if not dat['tx_id']:
"""
Digunakan untuk mendapatkan daftar produk
:param request:
:param data:
{
denom: string,
id_pel:string
inv_no: string optional
}
:param token:
user_token
:return:
{
product_nm:string,
denom: string,
id_pel:string
inv_no: string optional
denom:string,
harga:integer,
admin:integer,
discount:integer,
total:integer,
status:success/pending/failed
"""
user = auth_from_rpc(request)
i = 0
is_list = type(data) == list
data = is_list and data or [data]
customer = Partner.query_user(user).first()
if not customer:
raise JsonRpcCustomerNotFoundError
r_data = []
for dat in data:
if "invoice_no" not in dat:
dat["status"] = "FAILED" dat["status"] = "FAILED"
dat["message"] = "Parameter tidak lengkap" dat["message"] = "Parameter tidak lengkap"
else: return dat
tx_id = dat["tx_id"]
inv_no = dat["invoice_no"]
inv = PartnerPay.query_txid(tx_id).filter_by(cust_inv_no=inv_no).first()
if not inv:
dat["status"] = "FAILED"
dat["message"] = "Data Tagihan {} tidak ditemukan".format(inv_no)
return dat
vend_produk = PartnerProduk.query().filter_by(produk_id=inv.produk_id,
partner_id=inv.vendor_id).first()
if not vend_produk:
dat["status"] = "FAILED"
dat["message"] = "Data Produk tidak ditemukan".format(inv_no)
return dat
vendor_nm = vend_produk.modules
modul = '.advice'
pckgs = 'agratek.api.merchant.views.{}'.format(vendor_nm)
moduls = import_module(modul, pckgs)
typ = 'proses'
cls = hasattr(moduls, typ) and getattr(moduls, typ) or None
if cls:
order = cls(inv, vend_produk)
return order
return dict()
def purchase_advice(customer, dat):
inv_no = dat["invoice_no"] inv_no = dat["invoice_no"]
invoice = H2hArInvoice.query() \ invoice = H2hArInvoice.query() \
.filter_by(cust_inv_no=inv_no, .filter_by(cust_inv_no=inv_no,
customer_id=customer.id).first() customer_id=customer.id).first()
if not invoice: if not invoice:
dat["status"] = "FAILED" return dict(status = "FAILED",
dat["message"] = "Invoice %s Tidak Ditemukan" % inv_no message = "Invoice %s Tidak Ditemukan" % inv_no)
else: else:
qry = H2hArInvoiceDet.query().filter_by(ar_invoice_id=invoice.id) qry = H2hArInvoiceDet.query().filter_by(ar_invoice_id=invoice.id)
r_prod = [] r_prod = []
...@@ -317,8 +312,10 @@ def advice(request, data): ...@@ -317,8 +312,10 @@ def advice(request, data):
p.update(dict(status=status, p.update(dict(status=status,
message=message)) message=message))
else: else:
status = row.status == -1 and 'PENDING' or row.status == 1 and 'SUCCESS' \ status = row.status == -1 and 'PENDING' \
or row.status == -2 and 'PENDING' or "FAILED" or row.status == 1 and 'SUCCESS' \
or row.status == -2 and 'PENDING' \
or "FAILED"
p.update(dict( p.update(dict(
subtotal=(row.amt_sell or 0) + (row.discount or 0), subtotal=(row.amt_sell or 0) + (row.discount or 0),
discount=row.discount or 0, discount=row.discount or 0,
...@@ -342,6 +339,52 @@ def advice(request, data): ...@@ -342,6 +339,52 @@ def advice(request, data):
serial_number=p.serial_number or "", ) serial_number=p.serial_number or "", )
) )
dat["produk"] = r_prod dat["produk"] = r_prod
return dat
@jsonrpc_method(method='advice', endpoint='api-merchant')
def advice(request, data):
"""
Digunakan untuk mendapatkan daftar produk
:param request:
:param data:
{
denom: string,
id_pel:string
inv_no: string optional
}
:param token:
user_token
:return:
{
product_nm:string,
denom: string,
id_pel:string
inv_no: string optional
denom:string,
harga:integer,
admin:integer,
discount:integer,
total:integer,
status:success/pending/failed
"""
user = auth_from_rpc(request)
i = 0
is_list = type(data) == list
data = is_list and data or [data]
customer = Partner.query_user(user).first()
if not customer:
raise JsonRpcCustomerNotFoundError
r_data = []
for dat in data:
if "invoice_no" not in dat:
dat["status"] = "FAILED"
dat["message"] = "Parameter tidak lengkap"
else:
if 'tx_id' in dat:
dat.update(payment_advice(dat))
else:
dat.update(purchase_advice(customer, dat))
r_data.append(dat) r_data.append(dat)
i += 1 i += 1
data = is_list and r_data or r_data[0] data = is_list and r_data or r_data[0]
......
...@@ -159,7 +159,6 @@ def register(request, data, **kwargs): ...@@ -159,7 +159,6 @@ def register(request, data, **kwargs):
if not vendor_produk: if not vendor_produk:
raise JsonRpcProdukNotFoundError raise JsonRpcProdukNotFoundError
values = set_register_values(dat, customer) values = set_register_values(dat, customer)
credit_card = "credit_card" in dat and dat["credit_card"] or {} credit_card = "credit_card" in dat and dat["credit_card"] or {}
if credit_card: if credit_card:
......
...@@ -507,10 +507,76 @@ class Vendor(VendorClass): # VendorClass ...@@ -507,10 +507,76 @@ class Vendor(VendorClass): # VendorClass
self.set_static_params() self.set_static_params()
Nicepay.set("tXid", self.invoice_det.vend_inv_no) Nicepay.set("tXid", self.invoice_det.vend_inv_no)
self.request = Nicepay.requestData self.request = Nicepay.requestData
log.info(self.request)
self.save_log("advice") self.save_log("advice")
self.response = Nicepay.niceInquiry() result_data = Nicepay.niceInquiry()
response = json.loads(result_data)
self.response = response
log.info("NP RESPONSE: {}".format(json.dumps(self.response)))
self.save_log("advice")
# if 'resultCd' not in response:
# self.result = dict(
# error="Connection Timeout. Please Try Again!"
# )
# self.save_log(typ="inquiry")
# return
# result = dict()
# try:
# result_code = int(response['resultCd'])
# except:
# result_code = 999
#
# result["code"] = result_code
# result["message"] = response['resultMsg']
# if result_code == 0: # or self.pay_method == '01':
# result["code"] = 0
# result["message"] = 'SUCCESS'
# time_stamp = datetime.now().strftime('%Y%m%d%H%M%S')
# key = sha256("{}{}".format(self.cust_inv_no, time_stamp))
# tx_id = "{}{}".format(self.invoice_det.customer.users.user_name, key)
# result["tx_id"] = tx_id
# result["invoice_no"] = response['referenceNo']
# result["amount"] = response['amt']
# result["trans_date"] = response['transDt']
# result["trans_time"] = response['transTm']
# result["description"] = response['description']
# self.invoice_det.trans_dt = response["transDt"]
# self.invoice_det.trans_tm = response["transTm"]
# self.invoice_det.tx_id = tx_id
# self.vend_inv_no = response["tXid"]
# if self.pay_method == "02":
# result["va"] = dict(
# vacct_no=response['vacctNo'],
# valid_date=response['vacctValidDt'],
# valid_time=response['vacctValidTm'],
# )
# self.invoice_det.card_no = response['vacctNo']
#
# elif self.pay_method == "03":
# result["cvs"] = dict(
# pay_no=response['payNo'],
# valid_date=response['payValidDt'],
# valid_time=response['payValidTm'],
# )
# self.invoice_det.card_no = response['payNo']
# elif self.pay_method == "04":
# # clickpay
# result["receipt_code"]=response['receiptCode']
# elif self.pay_method == "05":
# # e-wallet
# result["receipt_code"]='receiptCode' in response and response['receiptCode'] or ''
# elif self.pay_method == "06":
# # akulaku
# pass
# self.result = result
self.save_log("advice") self.save_log("advice")
self.result = get_result(self.response, self.pay_method) self.result = get_result(self.response, self.pay_method)
self.result["tx_id"] = self.invoice_det.tx_id
self.save_log("advice") self.save_log("advice")
def notify(self, data): def notify(self, data):
......
import logging
from agratek.api.merchant.views.notify_vendor import payment_notify
from opensipkd.pasar.models.produk import PartnerPay, PartnerProduk
log = logging.getLogger(__name__)
from . import Vendor
def proses(invoice_det, vendor_produk):
vendor = Vendor(vendor_produk, invoice_det)
vendor.advice()
return invoice_det.advice["result"]
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!