Commit ed7bdb93 by Solo Group

advice

1 parent e57ca22c
......@@ -5,7 +5,7 @@ from opensipkd.base.tools.api import (auth_from_rpc,
JsonRpcProdukNotFoundError, JsonRpcCustomerNotFoundError,
JsonRpcParameterNotFound)
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 ..tools import JsonRpcInvoiceFoundError, JsonRpcError
......@@ -256,6 +256,92 @@ def purchase(request, data, **kwargs):
return data
def payment_advice(dat):
if not dat['tx_id']:
dat["status"] = "FAILED"
dat["message"] = "Parameter tidak lengkap"
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"]
invoice = H2hArInvoice.query() \
.filter_by(cust_inv_no=inv_no,
customer_id=customer.id).first()
if not invoice:
return dict(status = "FAILED",
message = "Invoice %s Tidak Ditemukan" % inv_no)
else:
qry = H2hArInvoiceDet.query().filter_by(ar_invoice_id=invoice.id)
r_prod = []
if "produk" in dat:
prods = []
for p in dat["produk"]:
row = qry.join(Produk, Produk.id == H2hArInvoiceDet.produk_id) \
.filter(Produk.kode == p["denom"],
H2hArInvoiceDet.id_pel == p["id_pel"]).first()
if not row:
status = "FAILED"
message = "Produk tidak ada"
p.update(dict(status=status,
message=message))
else:
status = row.status == -1 and 'PENDING' \
or row.status == 1 and 'SUCCESS' \
or row.status == -2 and 'PENDING' \
or "FAILED"
p.update(dict(
subtotal=(row.amt_sell or 0) + (row.discount or 0),
discount=row.discount or 0,
total=row.amt_sell,
status=status,
serial_number=row.serial_number or "", )
)
r_prod.append(p)
else:
for p in qry.all():
produk = Produk.query(). \
filter(Produk.id == p.produk_id).first()
status = p.status == -1 and 'PENDING' or p.status == 1 and 'SUCCESS' \
or p.status == -2 and 'PENDING' or "FAILED"
r_prod.append(dict(denom=produk.kode,
id_pel=p.id_pel,
subtotal=(p.amt_sell or 0) + (p.discount or 0),
discount=p.discount or 0,
total=p.amt_sell,
status=status,
serial_number=p.serial_number or "", )
)
dat["produk"] = r_prod
return dat
@jsonrpc_method(method='advice', endpoint='api-merchant')
def advice(request, data):
"""
......@@ -295,55 +381,12 @@ def advice(request, data):
dat["status"] = "FAILED"
dat["message"] = "Parameter tidak lengkap"
else:
inv_no = dat["invoice_no"]
invoice = H2hArInvoice.query() \
.filter_by(cust_inv_no=inv_no,
customer_id=customer.id).first()
if not invoice:
dat["status"] = "FAILED"
dat["message"] = "Invoice %s Tidak Ditemukan" % inv_no
if 'tx_id' in dat:
dat.update(payment_advice(dat))
else:
qry = H2hArInvoiceDet.query().filter_by(ar_invoice_id=invoice.id)
r_prod = []
if "produk" in dat:
prods = []
for p in dat["produk"]:
row = qry.join(Produk, Produk.id == H2hArInvoiceDet.produk_id) \
.filter(Produk.kode == p["denom"],
H2hArInvoiceDet.id_pel == p["id_pel"]).first()
if not row:
status = "FAILED"
message = "Produk tidak ada"
p.update(dict(status=status,
message=message))
else:
status = row.status == -1 and 'PENDING' or row.status == 1 and 'SUCCESS' \
or row.status == -2 and 'PENDING' or "FAILED"
p.update(dict(
subtotal=(row.amt_sell or 0) + (row.discount or 0),
discount=row.discount or 0,
total=row.amt_sell,
status=status,
serial_number=row.serial_number or "", )
)
r_prod.append(p)
else:
for p in qry.all():
produk = Produk.query(). \
filter(Produk.id == p.produk_id).first()
status = p.status == -1 and 'PENDING' or p.status == 1 and 'SUCCESS' \
or p.status == -2 and 'PENDING' or "FAILED"
r_prod.append(dict(denom=produk.kode,
id_pel=p.id_pel,
subtotal=(p.amt_sell or 0) + (p.discount or 0),
discount=p.discount or 0,
total=p.amt_sell,
status=status,
serial_number=p.serial_number or "", )
)
dat["produk"] = r_prod
r_data.append(dat)
i += 1
dat.update(purchase_advice(customer, dat))
r_data.append(dat)
i += 1
data = is_list and r_data or r_data[0]
return data
#
......
......@@ -159,7 +159,6 @@ def register(request, data, **kwargs):
if not vendor_produk:
raise JsonRpcProdukNotFoundError
values = set_register_values(dat, customer)
credit_card = "credit_card" in dat and dat["credit_card"] or {}
if credit_card:
......
......@@ -507,10 +507,76 @@ class Vendor(VendorClass): # VendorClass
self.set_static_params()
Nicepay.set("tXid", self.invoice_det.vend_inv_no)
self.request = Nicepay.requestData
log.info(self.request)
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.result = get_result(self.response, self.pay_method)
self.result["tx_id"] = self.invoice_det.tx_id
self.save_log("advice")
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!