Commit cfbd28d5 by aa.gusti

tangselpjk

1 parent 334fd32a
...@@ -157,7 +157,7 @@ def inquiry(request, data, **kwargs): ...@@ -157,7 +157,7 @@ def inquiry(request, data, **kwargs):
raise JsonRpcError(message=result["f_result"]["message"]) raise JsonRpcError(message=result["f_result"]["message"])
if result["f_result"]["code"] == 0: if result["f_result"]["code"] == 0:
prod.update(result) prod.update(result["f_result"])
else: else:
prod.update(dict(status="FAILED", prod.update(dict(status="FAILED",
message=result["message"])) message=result["message"]))
...@@ -226,7 +226,6 @@ def purchase(request, data, **kwargs): ...@@ -226,7 +226,6 @@ def purchase(request, data, **kwargs):
ar_invoice = H2hArInvoice() ar_invoice = H2hArInvoice()
ar_invoice.customer_id = customer.id ar_invoice.customer_id = customer.id
ar_invoice.cust_inv_no = inv_no ar_invoice.cust_inv_no = inv_no
ar_invoice.cust_inv_no = inv_no
ar_invoice.payment = dict(request=dat) ar_invoice.payment = dict(request=dat)
flush_row(ar_invoice) flush_row(ar_invoice)
r_prod = [] r_prod = []
...@@ -237,10 +236,7 @@ def purchase(request, data, **kwargs): ...@@ -237,10 +236,7 @@ def purchase(request, data, **kwargs):
prod["status"] = "FAILED" prod["status"] = "FAILED"
prod["message"] = "Denom atau id pelanggan tidak diisi" prod["message"] = "Denom atau id pelanggan tidak diisi"
else: else:
# produk = Produk.query_kode(produk_kd).first()
# todo: search product lowest price
vendor_produk = get_vendor_produk(produk_kd) vendor_produk = get_vendor_produk(produk_kd)
if not vendor_produk: if not vendor_produk:
prod["status"] = "FAILED" prod["status"] = "FAILED"
prod["message"] = "Data tidak ditemukan" prod["message"] = "Data tidak ditemukan"
...@@ -254,17 +250,17 @@ def purchase(request, data, **kwargs): ...@@ -254,17 +250,17 @@ def purchase(request, data, **kwargs):
flush_row(ar_invoice_det) flush_row(ar_invoice_det)
result = build_purchase(vendor_produk, ar_invoice_det) result = build_purchase(vendor_produk, ar_invoice_det)
total = "total" in result and result["total"] or 0 total = "total" in result and result["total"] or 0
prod.update(result) prod.update(result["f_result"])
# Perhitungan Total # # Perhitungan Total
# Jika harga jual lebih besar dari harga beli jual dipakai harga jual # # Jika harga jual lebih besar dari harga beli jual dipakai harga jual
# jika harga lebih kecil dari harga beli maka harga beli ditambah admin_fee # # jika harga lebih kecil dari harga beli maka harga beli ditambah admin_fee
if total: # if total:
if vendor_produk.produk.harga < total: # if vendor_produk.produk.harga < total:
total += vendor_produk.produk.harga # total += vendor_produk.produk.harga
elif vendor_produk.produk.harga > total: # elif vendor_produk.produk.harga > total:
total = vendor_produk.produk.harga # total = vendor_produk.produk.harga
prod.update(dict(total=total)) # prod.update(dict(total=total))
r_prod.append(prod) r_prod.append(prod)
ar_invoice.payment["response"] = r_prod ar_invoice.payment["response"] = r_prod
......
...@@ -138,14 +138,18 @@ class ViewData(BaseView): ...@@ -138,14 +138,18 @@ class ViewData(BaseView):
params = {'columns': [dict(title="ID"), params = {'columns': [dict(title="ID"),
dict(title="Kode"), dict(title="Kode"),
dict(title="Internal"), dict(title="Internal"),
dict(title="Partner"),
dict(title="Harga"), dict(title="Harga"),
dict(title="Discount"),
dict(title="Modules"), dict(title="Modules"),
dict(title="Status"), dict(title="Status"),
], ],
'column_data': [dict(data="id", width="0px"), 'column_data': [dict(data="id", width="0px"),
dict(data="kode", width="75px"), dict(data="kode", width="75px"),
dict(data="internal"), dict(data="internal"),
dict(data="partner"),
dict(data="harga"), dict(data="harga"),
dict(data="discount"),
dict(data="modules"), dict(data="modules"),
dict(data="status"), dict(data="status"),
], ],
...@@ -201,12 +205,15 @@ class ViewData(BaseView): ...@@ -201,12 +205,15 @@ class ViewData(BaseView):
ColumnDT(PartnerProduk.id, mData='id'), ColumnDT(PartnerProduk.id, mData='id'),
ColumnDT(PartnerProduk.kode, mData='kode'), ColumnDT(PartnerProduk.kode, mData='kode'),
ColumnDT(Produk.kode, mData='internal'), ColumnDT(Produk.kode, mData='internal'),
ColumnDT(Partner.kode, mData='partner'),
ColumnDT(PartnerProduk.harga, mData='harga'), ColumnDT(PartnerProduk.harga, mData='harga'),
ColumnDT(PartnerProduk.discount, mData='discount'),
ColumnDT(PartnerProduk.modules, mData='modules'), ColumnDT(PartnerProduk.modules, mData='modules'),
ColumnDT(PartnerProduk.status, mData='status'), ColumnDT(PartnerProduk.status, mData='status'),
] ]
query = DBSession.query().select_from(PartnerProduk)\ query = DBSession.query().select_from(PartnerProduk)\
.join(Produk, PartnerProduk.produk_id==Produk.id) .join(Produk, PartnerProduk.produk_id == Produk.id)\
.join(Partner, PartnerProduk.partner_id == Partner.id)
row_table = DataTables(request.GET, query, columns) row_table = DataTables(request.GET, query, columns)
return row_table.output_result() return row_table.output_result()
......
import base64
import json
from time import sleep
import requests
from opensipkd.base import get_settings
from opensipkd.base.tools.api import JsonRpcBillAllreadyPaidError, JsonRpcBillNotFoundError
from opensipkd.pasar.models import PartnerProduk, H2hArInvoiceDet
from pyramid_rpc.jsonrpc import JsonRpcError
from ..vendor import VendorClass
import logging
log = logging.getLogger(__name__)
import urllib3
urllib3.disable_warnings()
"""
PJDL
http://103.66.86.115:8989/interface-tangerang-1.0.0/pjdlJson/inq
http://103.66.86.115:8989/interface-tangerang-1.0.0/pjdlJson/pay
PBB
http://103.66.86.115:8989/interface-tangerang-1.0.0/pbbJson/inq
http://103.66.86.115:8989/interface-tangerang-1.0.0/pbbJson/pay
BPHTB
http://103.66.86.115:8989/interface-tangerang-1.0.0/bphtbJson/inq
http://103.66.86.115:8989/interface-tangerang-1.0.0/bphtbJson/pay
"""
class Vendor(VendorClass):
def __init__(self, vendor_produk, invoice_det):
VendorClass.__init__(self, vendor_produk, invoice_det=invoice_det)
# id_pel, customer_id, cust_trx, row
settings = get_settings()
self.mid = 'tangselpay_mid' in settings and settings['tangselpay_mid'] or None
self.key = 'tangselpay_key' in settings and settings['tangselpay_key'] or None
self.url = 'tangselpay_url' in settings and settings['tangselpay_url'] or None
key = ":".join([self.mid, self.key]).encode()
self.auth = base64.b64encode(key).decode()
self.inq_url = '{0}/pbbJson/inq'.format(self.url)
self.pay_url = '{0}/pbbJson/pay'.format(self.url)
def get_headers(self):
return {'Authorization': 'Bearer {key}'.format(key=self.auth)}
def get_url(self, url=None):
return url and self.url + url or self.url
def inquiry_field(self):
return \
{
"oRef": "000001",
"dateSettlement": "0925",
"merchantType": "6014",
"accountCurrency": "360",
"terminalId": "02W001",
"terminalName": "Mobile POS Tangsel",
"terminalLoc": "Tangerang Selatan",
"nop": "3676060001000100010",
"tahunPajak": "2019"
}
def response_field(self):
resp = self.response
if resp["responseCode"] == "00":
# oRef
# dateSettlement
# merchantType
# accountCurrency
# terminalId
# terminalName
# terminalLoc
# nop
# tahunPajak
rincian = dict(
alamat=resp["lokasi"],
kelurahaan=resp["kelurahaan"],
kecamatan=resp["kecamatan"],
provinsi=resp["provinsi"],
luas_bumi=resp["luasTanah"],
luas_bng=resp["luasBangunan"],
jatuh_tempo=resp["tanggalJatuhTempo"],
pokok=resp["tagihan"],
denda=resp["denda"],
sub_total=resp["totalBayar"],
admin=resp["biayaAdmin"],
code=resp["responseCode"],
message=resp["responseDesc"],
discount=resp["discount"])
self.amt_buy = rincian["sub_total"]
harga_pokok = rincian["pokok"]+rincian["denda"]
# denda = rincian["denda"]
admin = rincian["admin"]
product_id = self.invoice_det.produk.id
if hasattr(self.invoice_det, "customer_id"):
partner_id = self.invoice_det.customer_id
else:
partner_id = self.invoice_det.h2h_ar_invoice.customer_id
discount = PartnerProduk.get_discount(partner_id, product_id)
self.discount = discount
self.amt_sell = int(harga_pokok) + admin - self.discount
result = {"subtotal": int(harga_pokok),
"admin": admin,
"discount": self.discount,
"total": self.amt_sell,
'rincian': rincian}
return result
else:
code = int(resp["responseCode"])
message = resp["responseDesc"]
if code == 54:
raise JsonRpcBillAllreadyPaidError()
elif code == 55:
raise JsonRpcBillNotFoundError()
else:
raise JsonRpcError(code=code,
message=message)
def inquiry(self):
if not self.v_produk_kd or not self.id_pel:
return self.set_response(message='Parameter tidak lengkap')
self.request = self.inquiry_field()
log.info("Inquiry Request: url: {} params {}".format(self.inq_url, self.request))
self.save_log("inquiry")
try:
resp = requests.get(self.inq_url, params=self.request, verify=False,
headers=self.get_headers(), timeout=15)
except:
return self.set_response(message="Biller Not Response")
if not resp:
return self.set_response(message="Biller No Response")
try:
result = json.loads(resp.text)
except:
result = resp.text
self.response = result
log.info("Inquiry Response: %s" % self.response)
if resp.status_code == 200:
self.status = 1 # sukses
parsd = self.response_field()
if parsd:
parsd.update(code=0,
message="SUCCESS",
status="SUCCESS")
else:
self.status = -1
parsd = None
return self.set_failed()
return self.set_response(parsd)
def payment(self):
inq = self.inquiry()
params = self.response
try:
resp = requests.post(self.inq_url, data=json.dumps(params), verify=False,
headers=self.get_headers(), timeout=15)
except:
resp = None
if resp is None:
self.status = 0
return self.set_pending(parsd)
# todo: dibuat seolah menjadi belum di transaksikan
# todo: membuat cron untuk melakukan pengecekan transaksi
try:
result = json.loads(resp.text)
self.response = result
log.info("Payment Response: %s" % self.response)
except:
result = resp.text
self.response = result
log.info("Payment Response: %s" % self.response)
self.status = 0
return self.set_pending(parsd)
if resp.status_code == 200 and type(result) is dict: # 0200
data = "data" in result and result["data"] or {}
if not data:
self.status = 0
return self.set_pending(parsd)
self.vend_inv_no = "order_id" in data and data["order_id"] or self.vend_inv_no
self.amt_buy = "price" in data and data["price"] or self.amt_buy
parsd = self.get_headers
self.serial_number = 'serial_number' in data and data["serial_numner"] \
or self.serial_number
return self.set_success(parsd)
else:
self.status = -1
parsd = None
return self.set_pending(parsd)
def advice(self):
if not self.v_produk_kd or not self.id_pel or not self.invoice_det:
return dict(code=9999,
message='Parameter tidak lengkap')
if self.kategori == 'e-payment':
order_id = self.invoice_det.vend_inv_no
url = self.get_url('/order/{order_id}'.format(order_id=order_id))
params = None
self.request = url
else:
params = dict(
data=dict(
denom=self.v_produk_kd,
number=self.id_pel
)
)
self.request = params
url = self.get_url('/prepaid/purchase-get')
self.save_log("advice")
try:
resp = requests.get(url, params=params, verify=False,
headers=self.get_headers(), timeout=15)
except:
return self.set_response()
try:
result = json.loads(resp.text)
except:
result = resp.text
self.response = result
if resp.ok:
self.status = 1 # sukses
data = "data" in result and result["data"] or None
parsd = self.pars_data(data)
elif resp.status_code == 400:
self.status = -3
parsd = dict(code=resp.status_code,
message=resp.text)
else:
self.status = -4
parsd = dict(code=500,
message="Other Error")
self.save_log('advice')
return parsd
import base64
import json
from time import sleep
from datetime import datetime
import requests
from opensipkd.base import get_settings
from opensipkd.base.tools import get_random_string, get_random_number
from opensipkd.base.tools.api import JsonRpcBillAllreadyPaidError, JsonRpcBillNotFoundError
from opensipkd.pasar.models import PartnerProduk, H2hArInvoiceDet
from pyramid_rpc.jsonrpc import JsonRpcError
from ..vendor import VendorClass
import logging
log = logging.getLogger(__name__)
import urllib3
urllib3.disable_warnings()
"""
PJDL
http://103.66.86.115:8989/interface-tangerang-1.0.0/pjdlJson/inq
http://103.66.86.115:8989/interface-tangerang-1.0.0/pjdlJson/pay
PBB
http://103.66.86.115:8989/interface-tangerang-1.0.0/pbbJson/inq
http://103.66.86.115:8989/interface-tangerang-1.0.0/pbbJson/pay
BPHTB
http://103.66.86.115:8989/interface-tangerang-1.0.0/bphtbJson/inq
http://103.66.86.115:8989/interface-tangerang-1.0.0/bphtbJson/pay
"""
class Vendor(VendorClass):
def __init__(self, vendor_produk, invoice_det):
VendorClass.__init__(self, vendor_produk, invoice_det=invoice_det)
# id_pel, customer_id, cust_trx, row
settings = get_settings()
self.mid = 'tangselpjk_mid' in settings and settings['tangselpjk_mid'] or None
self.key = 'tangselpjk_key' in settings and settings['tangselpjk_key'] or None
self.url = 'tangselpjk_url' in settings and settings['tangselpjk_url'] or None
key = ":".join([self.mid, self.key]).encode()
self.auth = base64.b64encode(key).decode()
self.inq_url = '{0}/pbbJson/inq'.format(self.url)
self.pay_url = '{0}/pbbJson/pay'.format(self.url)
def get_headers(self):
return {'Content-Type': 'application/json'}
def get_url(self, url=None):
return url and self.url + url or self.url
def inquiry_field(self):
kini = datetime.now()
date_settlement = kini.strftime("%m%d")
nop = self.id_pel[:18]
tahun = self.id_pel[-4:]
return \
{
"noRef": get_random_number(6),
"dateSettlement": date_settlement,
"merchantType": "6014",
"accountCurrency": "360",
"terminalId": "02W001",
"terminalName": "Mobile POS Tangsel",
"terminalLoc": "Tangerang Selatan",
"nop": nop,
"tahunPajak": tahun,
}
def set_inquiry_error(self, resp):
code = int(resp["responseCode"])
message = resp["responseDesc"]
if code == 54:
raise JsonRpcBillAllreadyPaidError()
elif code == 55:
raise JsonRpcBillNotFoundError()
else:
raise JsonRpcError(code=code, message=message)
def response_field(self):
resp = self.response
if resp["responseCode"] == "00":
pokok = int(resp["tagihan"] or '0')
denda = int(resp["denda"] or '0')
disc_biller = int(resp["diskon"] or '0')
sub_total = pokok + denda - disc_biller
result = self.get_price(sub_total)
admin = int(self.vendor_produk.produk.harga)
# todo: cek kembali harga apakah wajar atau tidak
# adm_biller = int(resp["diskon"] or '0')
# jika harga admin biller > dari admin
# if self.amt_buy < sub_total+adm_biller:
# raise
# if admin < adm_biller:
# admin = adm_biller
rincian = dict(
pokok=pokok,
denda=denda,
discount=disc_biller,
subtotal=sub_total,
admin=admin,
total=sub_total+admin,
# code=resp["responseCode"],
# message=resp["responseDesc"],
nama=resp["nama"],
alamat=resp["lokasi"],
kelurahaan=resp["kelurahaan"],
kecamatan=resp["kecamatan"],
provinsi=resp["provinsi"],
luas_bumi=int(resp["luasTanah"]),
luas_bng=int(resp["luasBangunan"]),
jatuh_tempo=resp["tanggalJatuhTempo"],
)
result.update(dict(rincian=rincian))
return result
else:
self.set_inquiry_error(resp)
def _inquiry(self):
if not self.v_produk_kd or not self.id_pel:
return self.set_response(message='Parameter tidak lengkap')
self.request = self.inquiry_field()
log.info("Inquiry Request: url: {} params {}".format(self.inq_url, self.request))
self.save_log("inquiry")
params = json.dumps(self.request)
log.info(params)
try:
resp = requests.post(self.inq_url, data=params,
verify=False,
headers=self.get_headers(),
timeout=20)
except:
log.info("Biller Error")
return
if not resp:
log.info("No Response From Biller")
return
try:
result = json.loads(resp.text)
except:
result = resp.text
self.response = result
log.info("Inquiry Response: %s" % self.response)
return resp
def inquiry(self):
resp = self._inquiry()
if resp is None:
return self.set_failed(typ="inquiry")
if resp.status_code == 200:
parsd = self.response_field()
return self.set_success(parsd, typ="inquiry")
else:
return self.set_failed(typ="inquiry")
def payment(self):
resp = self._inquiry()
if resp is None:
return self.set_failed()
if self.response["responseCode"] != "00":
self.set_inquiry_error(self.response)
params = json.dumps(self.response)
log.info("Payment url: {} params: {}".format(self.pay_url, params))
try:
resp = requests.post(self.pay_url, data=params, verify=False,
headers=self.get_headers(), timeout=15)
except:
resp = None
if resp is None:
self.status = 0
return self.set_pending()
try:
result = json.loads(resp.text)
self.response = result
log.info("Payment Response: %s" % self.response)
except:
result = resp.text
self.response = result
log.info("Payment Response: %s" % self.response)
self.status = 0
return self.set_pending()
if resp.status_code == 200:
self.status = 1 # sukses
parsd = self.response_field()
self.serial_number = 'ntb' in result and result["ntb"].strip() \
or self.serial_number
parsd["rincian"].update(dict(
ntb=self.serial_number,
ntp='ntp' in result and result["ntp"].strip() or ''))
return self.set_success(parsd)
else:
self.status = 0
return self.set_pending()
def advice(self):
raise JsonRpcError(message="Not Implemented")
# if not self.v_produk_kd or not self.id_pel or not self.invoice_det:
# return dict(code=9999,
# message='Parameter tidak lengkap')
#
# if self.kategori == 'e-payment':
# order_id = self.invoice_det.vend_inv_no
# url = self.get_url('/order/{order_id}'.format(order_id=order_id))
# params = None
# self.request = url
# else:
# params = dict(
# data=dict(
# denom=self.v_produk_kd,
# number=self.id_pel
# )
# )
# self.request = params
# url = self.get_url('/prepaid/purchase-get')
#
# self.save_log("advice")
# try:
# resp = requests.get(url, params=params, verify=False,
# headers=self.get_headers(), timeout=15)
# except:
# return self.set_response()
#
# try:
# result = json.loads(resp.text)
# except:
# result = resp.text
#
# self.response = result
# if resp.ok:
# self.status = 1 # sukses
# data = "data" in result and result["data"] or None
# parsd = self.pars_data(data)
#
# elif resp.status_code == 400:
# self.status = -3
# parsd = dict(code=resp.status_code,
# message=resp.text)
# else:
# self.status = -4
# parsd = dict(code=500,
# message="Other Error")
#
# self.save_log('advice')
# return parsd
import base64
import json
import re
from time import sleep
from datetime import datetime
import requests
from opensipkd.base import get_settings
from opensipkd.base.tools import get_random_string, get_random_number
from opensipkd.base.tools.api import JsonRpcBillAllreadyPaidError, JsonRpcBillNotFoundError
from opensipkd.pasar.models import PartnerProduk, H2hArInvoiceDet
from pyramid_rpc.jsonrpc import JsonRpcError
from ..vendor import VendorClass
import logging
log = logging.getLogger(__name__)
import urllib3
urllib3.disable_warnings()
"""
PJDL
http://103.66.86.115:8989/interface-tangerang-1.0.0/pjdlJson/inq
http://103.66.86.115:8989/interface-tangerang-1.0.0/pjdlJson/pay
PBB
http://103.66.86.115:8989/interface-tangerang-1.0.0/pbbJson/inq
http://103.66.86.115:8989/interface-tangerang-1.0.0/pbbJson/pay
BPHTB
http://103.66.86.115:8989/interface-tangerang-1.0.0/bphtbJson/inq
http://103.66.86.115:8989/interface-tangerang-1.0.0/bphtbJson/pay
"""
class Vendor(VendorClass):
def __init__(self, vendor_produk, invoice_det):
VendorClass.__init__(self, vendor_produk, invoice_det=invoice_det)
# id_pel, customer_id, cust_trx, row
settings = get_settings()
self.mid = 'tangselpjk_mid' in settings and settings['tangselpjk_mid'] or None
self.key = 'tangselpjk_key' in settings and settings['tangselpjk_key'] or None
self.url = 'tangselpjk_url' in settings and settings['tangselpjk_url'] or None
key = ":".join([self.mid, self.key]).encode()
self.auth = base64.b64encode(key).decode()
self.inq_url = '{0}/pjdlJson/inq'.format(self.url)
self.pay_url = '{0}/pjdlJson/pay'.format(self.url)
def get_headers(self):
return {'Content-Type': 'application/json'}
def get_url(self, url=None):
return url and self.url + url or self.url
def inquiry_field(self):
kini = datetime.now()
date_settlement = kini.strftime("%m%d")
no_bayar = self.id_pel
return \
{
"noRef": get_random_number(6),
"dateSettlement": date_settlement,
"merchantType": "6014",
"accountCurrency": "360",
"terminalId": "02W001",
"terminalName": "Mobile POS Tangsel",
"terminalLoc": "Tangerang Selatan",
"kodeBayar": no_bayar,
}
def set_inquiry_error(self, resp):
code = int(resp["responseCode"])
message = resp["responseDesc"]
if code == 54:
raise JsonRpcBillAllreadyPaidError()
elif code == 55:
raise JsonRpcBillNotFoundError()
else:
raise JsonRpcError(code=code, message=message)
def response_field(self):
resp = self.response
if resp["responseCode"] == "00":
pokok = int(resp["billAmount"] or '0')
denda = int(resp["chargeAmount"] or '0')
disc_biller = 0
sub_total = pokok + denda - disc_biller
result = self.get_price(sub_total)
admin = int(self.vendor_produk.produk.harga)
# todo: cek kembali harga apakah wajar atau tidak
# adm_biller = int(resp["diskon"] or '0')
# jika harga admin biller > dari admin
# if self.amt_buy < sub_total+adm_biller:
# raise
# if admin < adm_biller:
# admin = adm_biller
rincian = dict(
pokok=pokok,
denda=denda,
discount=disc_biller,
subtotal=sub_total,
admin=admin,
total=sub_total + admin,
npwp=resp['npwpd'],
nama=resp['namaWp'],
masa_awal=resp['masaAwal'],
masa_akhir=resp['masaAkhir'],
jns_pajak=resp['jenisPajak'],
kd_pajak=resp['kodeRekening'],
nm_pajal=resp['namaRekening'],
alamat1=resp['alamat1'],
alamat2=resp['alamat2'],
)
result.update(dict(rincian=rincian))
return result
else:
self.set_inquiry_error(resp)
def _inquiry(self):
if not self.v_produk_kd or not self.id_pel:
return self.set_response(message='Parameter tidak lengkap')
self.request = self.inquiry_field()
log.info("Inquiry Request: url: {} params {}".format(self.inq_url, self.request))
self.save_log("inquiry")
params = json.dumps(self.request)
log.info(params)
try:
resp = requests.post(self.inq_url, data=params,
verify=False,
headers=self.get_headers(),
timeout=20)
except:
log.info("Biller Error")
return
if not resp:
log.info("No Response From Biller")
return
try:
result = json.loads(resp.text)
except:
result = resp.text
self.response = result
log.info("Inquiry Response: %s" % self.response)
return resp
def inquiry(self):
resp = self._inquiry()
if resp is None:
return self.set_failed(typ="inquiry")
if resp.status_code == 200:
parsd = self.response_field()
return self.set_success(parsd, typ="inquiry")
else:
return self.set_failed(typ="inquiry")
def payment(self):
resp = self._inquiry()
if not resp:
return self.set_failed()
if self.response["responseCode"] != "00":
self.set_inquiry_error(self.response)
params = json.dumps(self.response)
log.info("Payment url: {} params: {}".format(self.pay_url, params))
try:
resp = requests.post(self.pay_url, data=params, verify=False,
headers=self.get_headers(), timeout=15)
except:
resp = None
if resp is None:
self.status = 0
return self.set_pending()
try:
result = json.loads(resp.text)
self.response = result
log.info("Payment Response: %s" % self.response)
except:
result = resp.text
self.response = result
log.info("Payment Response: %s" % self.response)
self.status = 0
return self.set_pending()
if resp.status_code == 200:
self.status = 1 # sukses
parsd = self.response_field()
self.serial_number = 'ntb' in result and result["ntb"].strip() \
or self.serial_number
parsd["rincian"].update(dict(
ntb=self.serial_number,
ntp='ntp' in result and result["ntp"].strip() or ''))
return self.set_success(parsd)
else:
self.status = 0
return self.set_pending()
def advice(self):
raise JsonRpcError(message="Not Implemented")
# if not self.v_produk_kd or not self.id_pel or not self.invoice_det:
# return dict(code=9999,
# message='Parameter tidak lengkap')
#
# if self.kategori == 'e-payment':
# order_id = self.invoice_det.vend_inv_no
# url = self.get_url('/order/{order_id}'.format(order_id=order_id))
# params = None
# self.request = url
# else:
# params = dict(
# data=dict(
# denom=self.v_produk_kd,
# number=self.id_pel
# )
# )
# self.request = params
# url = self.get_url('/prepaid/purchase-get')
#
# self.save_log("advice")
# try:
# resp = requests.get(url, params=params, verify=False,
# headers=self.get_headers(), timeout=15)
# except:
# return self.set_response()
#
# try:
# result = json.loads(resp.text)
# except:
# result = resp.text
#
# self.response = result
# if resp.ok:
# self.status = 1 # sukses
# data = "data" in result and result["data"] or None
# parsd = self.pars_data(data)
#
# elif resp.status_code == 400:
# self.status = -3
# parsd = dict(code=resp.status_code,
# message=resp.text)
# else:
# self.status = -4
# parsd = dict(code=500,
# message="Other Error")
#
# self.save_log('advice')
# return parsd
...@@ -51,6 +51,8 @@ class VendorClass(object): ...@@ -51,6 +51,8 @@ class VendorClass(object):
self.serial_number = invoice_det and hasattr(invoice_det, 'serial_number') \ self.serial_number = invoice_det and hasattr(invoice_det, 'serial_number') \
and invoice_det.serial_number or None and invoice_det.serial_number or None
self.amt_buy = 0 self.amt_buy = 0
self.amt_sell = 0
self.discount = 0
def set_response(self, data=None, message=None, code=999, typ="inquiry"): def set_response(self, data=None, message=None, code=999, typ="inquiry"):
if not data and message: if not data and message:
...@@ -63,17 +65,15 @@ class VendorClass(object): ...@@ -63,17 +65,15 @@ class VendorClass(object):
log.info("Result: %s" % data) log.info("Result: %s" % data)
return data return data
def set_success(self, data=None): def set_success(self, data=None, typ="payment"):
self.status = 1 self.status = 1
typ = "payment"
data = data and data or {} data = data and data or {}
data.update(dict(code=0, data.update(dict(code=0,
message="SUCCESS", message="SUCCESS",
status="SUCCESS")) status="SUCCESS"))
return self.set_response(data, typ=typ) return self.set_response(data, typ=typ)
def set_failed(self, data=None, message=None): def set_failed(self, data=None, message=None, typ="payment"):
typ = "payment"
self.status = -3 self.status = -3
data = data and data or {} data = data and data or {}
message = message and message or "FAILED" message = message and message or "FAILED"
...@@ -82,9 +82,8 @@ class VendorClass(object): ...@@ -82,9 +82,8 @@ class VendorClass(object):
status="FAILED")) status="FAILED"))
return self.set_response(data, typ=typ) return self.set_response(data, typ=typ)
def set_double(self, data=None, message=None): def set_double(self, data=None, message=None, typ="payment"):
self.status = -3 self.status = -3
typ = "payment"
message = message and message or "DOUBLE" message = message and message or "DOUBLE"
data = data and data or {} data = data and data or {}
data.update(dict(code=67, data.update(dict(code=67,
...@@ -92,9 +91,8 @@ class VendorClass(object): ...@@ -92,9 +91,8 @@ class VendorClass(object):
status="FAILED")) status="FAILED"))
return self.set_response(data, typ=typ) return self.set_response(data, typ=typ)
def set_pending(self, data=None, message=None): def set_pending(self, data=None, message=None, typ="payment"):
data = data and data or {} data = data and data or {}
typ = "payment"
message = message and message or "PENDING" message = message and message or "PENDING"
data.update(dict(code=68, data.update(dict(code=68,
status="PENDING", status="PENDING",
...@@ -102,15 +100,16 @@ class VendorClass(object): ...@@ -102,15 +100,16 @@ class VendorClass(object):
) )
return self.set_response(data, typ=typ) return self.set_response(data, typ=typ)
def get_price(self): def get_price(self, pokok=0):
product_id = self.invoice_det.produk.id product_id = self.invoice_det.produk_id
self.amt_buy = pokok+self.vendor_produk.harga
if hasattr(self.invoice_det, "customer_id"): if hasattr(self.invoice_det, "customer_id"):
partner_id = self.invoice_det.customer_id customer_id = self.invoice_det.customer_id
else: else:
partner_id = self.invoice_det.h2h_ar_invoice.customer_id customer_id = self.invoice_det.h2h_ar_invoice.customer_id
harga = self.vendor_produk.produk.harga harga = pokok+self.vendor_produk.produk.harga
self.discount = PartnerProduk.get_discount(partner_id, product_id) self.discount = PartnerProduk.get_discount(customer_id, product_id)
self.amt_sell = harga - self.discount self.amt_sell = harga - self.discount
return dict( return dict(
subtotal=int(harga), subtotal=int(harga),
...@@ -119,18 +118,6 @@ class VendorClass(object): ...@@ -119,18 +118,6 @@ class VendorClass(object):
) )
def save_log(self, typ): def save_log(self, typ):
# if not self.partner_log:
# row = self.partner_log or PartnerLog()
# row.vendor_id = self.vendor_id
# row.produk_id = self.produk_id
# row.bill_no = self.bill_no
# row.customer_id = self.customer_id
#
# row.cust_trx = self.cust_trx
# row.vend_trx = self.vend_trx
# row.status = self.status
# row.amt_buy = self.amt_buy
# row.amt_sell = self.amt_sell
self.invoice_det.status = self.status self.invoice_det.status = self.status
if hasattr(self.invoice_det, 'serial_number'): if hasattr(self.invoice_det, 'serial_number'):
self.invoice_det.serial_number = self.serial_number self.invoice_det.serial_number = self.serial_number
...@@ -141,6 +128,9 @@ class VendorClass(object): ...@@ -141,6 +128,9 @@ class VendorClass(object):
if self.amt_buy: if self.amt_buy:
self.invoice_det.amt_buy = self.amt_buy self.invoice_det.amt_buy = self.amt_buy
if self.amt_sell:
self.invoice_det.amt_sell = self.amt_sell
if typ == 'inquiry': if typ == 'inquiry':
self.invoice_det.inquiry = dict(request=self.request, self.invoice_det.inquiry = dict(request=self.request,
response=self.response, response=self.response,
...@@ -161,44 +151,44 @@ class VendorClass(object): ...@@ -161,44 +151,44 @@ class VendorClass(object):
flush_row(self.invoice_det) flush_row(self.invoice_det)
class Other(object): # class Other(object):
def __init_subclass__(self, **kwargs): # def __init_subclass__(self, **kwargs):
self.settings = get_settings() # self.settings = get_settings()
vendor_produk = "vendor_produk" in kwargs and kwargs["vendor_produk"] or None # vendor_produk = "vendor_produk" in kwargs and kwargs["vendor_produk"] or None
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.v_produk_kd = vendor_produk.kode
self.produk_kd = vendor_produk.produk.kode # self.produk_kd = vendor_produk.produk.kode
self.kategori = vendor_produk.produk.kategori.nama # self.kategori = vendor_produk.produk.kategori.nama
values = "values" in kwargs and kwargs["values"] or None # values = "values" in kwargs and kwargs["values"] or None
# self.bill_no = bill_no # # self.bill_no = bill_no
self.customer_id = 'customer_id' in values and values['customer_id'] or None # self.customer_id = 'customer_id' in values and values['customer_id'] or None
self.cust_trx = 'cust_trx' in values and values['cust_trx'] or None # self.cust_trx = 'cust_trx' in values and values['cust_trx'] or None
row = 'row' in values and values['row'] or None # row = 'row' in values and values['row'] or 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.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
self.amt_sell = row and row.amt_sell or 0 # self.amt_sell = row and row.amt_sell or 0
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.response = None
self.request = None # self.request = None
#
# bill_no, customer_id = customer_id, # # bill_no, customer_id = customer_id,
# cust_trx_id = cust_trx_id, row = row, # # cust_trx_id = cust_trx_id, row = row,
# # #
#
def get_product(self): # def get_product(self):
pass # pass
#
def inquiry(self): # def inquiry(self):
pass # pass
#
def payment(self): # def payment(self):
pass # pass
def sha256(hash_string): def sha256(hash_string):
......
...@@ -160,6 +160,7 @@ def save_ar_invoice(values, vendor_produk): ...@@ -160,6 +160,7 @@ def save_ar_invoice(values, vendor_produk):
flush_row(invoice_det) flush_row(invoice_det)
return invoice_det return invoice_det
class ViewHome(BaseView): class ViewHome(BaseView):
@view_config(route_name='api-vendor-doc', @view_config(route_name='api-vendor-doc',
permission="api-vendor-doc", permission="api-vendor-doc",
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!