Commit a1e5f489 by aa.gusti

message inqury and add partner form

1 parent 533f0000
......@@ -8,7 +8,8 @@ CHANGES = open(os.path.join(here, 'CHANGES.txt')).read()
requires=[
"opensipkd.base",
"opensipkd.pasar.models"
"opensipkd.pasar.models",
"xmltodict"
]
......
kode,path,nama,status,type
api-merchant-home,/api/merchant/home,Api Merchant Home,1,0
api-merchant,/api/merchant,Api Merchant,1,1
api-vendor-notify,/api/vendor/{name}/notify,Api Vendor Notify,1,0
......@@ -55,4 +56,11 @@ api-customer-act,/api/customer/{act}/act,Act Customer,1,0
api-customer-view,/api/customer/{id}/view,View Customer,1,0
api-customer-add,/api/customer/add,Add Customer,1,0
api-customer-edit,/api/customer/{id}/edit,Edit Customer,1,0
api-customer-delete,/api/customer/{id}/delete,Delete Customer,1,0
\ No newline at end of file
api-customer-delete,/api/customer/{id}/delete,Delete Customer,1,0
api-partner-list,/api/partner/list,Api List partner,1,0
api-partner-act,/api/partner/{act}/act,Api Act partner,1,0
api-partner-view,/api/partner/{id}/view,Api View partner,1,0
api-partner-add,/api/partner/add,Api Add partner,1,0
api-partner-edit,/api/partner/{id}/edit,Api Edit partner,1,0
api-partner-delete,/api/partner/{id}/delete,Api Delete partner,1,0
\ No newline at end of file
from opensipkd.base.views import (BaseView)
from opensipkd.pasar.models.views import deferred_vendor, deferred_customer, deferred_produk
from pyramid.view import view_config
@view_config(route_name='api-merchant-home',
permission="view",
renderer='templates/home.pt')
def view_home(request):
return dict()
import logging
from importlib import import_module
from opensipkd.base import is_devel
from opensipkd.base.models import Partner, flush_row
from opensipkd.base.tools.api import (auth_from_rpc,
JsonRpcProdukNotFoundError, JsonRpcCustomerNotFoundError,
......@@ -8,8 +7,8 @@ from opensipkd.base.tools.api import (auth_from_rpc,
from opensipkd.pasar.models import Produk, PartnerProduk
from opensipkd.pasar.models.produk import H2hArInvoice, H2hArInvoiceDet, PartnerLog
from pyramid_rpc.jsonrpc import jsonrpc_method
from opensipkd.base.tools import get_settings
import logging
from ..tools import JsonRpcInvoiceFoundError, JsonRpcError
log = logging.getLogger(__name__)
......@@ -22,21 +21,21 @@ def build_request(typ, vendor_produk, partner_log=None):
pckgs = 'agratek.api.merchant.views'
moduls = vendor_produk.modules.split('.')
if len(moduls)>1:
if len(moduls) > 1:
pckg = ".".join(moduls[:-1])
pckgs = ".".join([pckgs, pckg])
moduls = moduls[-1:]
modul = moduls[0]
log.info("Module: %s Pckgs: %s" %(modul, pckgs))
log.info("Module: %s Pckgs: %s" % (modul, pckgs))
modul = '.' + modul
modules = import_module(modul, pckgs)
cls_module = modules.Vendor(vendor_produk, partner_log)
cls = hasattr(cls_module, typ) and getattr(cls_module, typ) or None
if cls:
result = cls()
#log.info("Build Req: mod %s rslt: %s" % (vendor_produk.modules, data))
# log.info("Build Req: mod %s rslt: %s" % (vendor_produk.modules, data))
log.info("Request %s" % cls_module.request)
log.info("Response %s" % cls_module.response)
log.info("Result %s" % cls_module.result)
......@@ -44,7 +43,7 @@ def build_request(typ, vendor_produk, partner_log=None):
result["f_response"] = cls_module.response
result["f_result"] = cls_module.result
result["f_request"] = cls_module.request
# result["url"] = cls_module.url
else:
log.info("Module %s Not Found" % vendor_produk.modules)
......@@ -55,6 +54,16 @@ def build_request(typ, vendor_produk, partner_log=None):
return result
def save_partner_log(values, vendor_produk):
partner_log = PartnerLog()
partner_log.vendor_id = vendor_produk.partner_id
partner_log.produk_id = vendor_produk.produk.id
partner_log.customer_id = values["customer_id"]
partner_log.id_pel = values["id_pel"]
flush_row(partner_log)
return partner_log
def qry_vendor_produk():
return PartnerProduk.query() \
.join(Partner, Partner.id == PartnerProduk.partner_id) \
......@@ -65,84 +74,54 @@ def get_vendor_produk(produk_kd, vendor_kd=None, harga=None):
"""
Fungsi ini digunakan untuk mencari vendor yang paling murah
:param produk_kd: String Kode Produk
:param level: Digunakan sebagai parameter jika yang paling murah tidak ditemukan
:vendor_kd: Kode Vendor
:param vendor_kd: Kode Vendor
:return: row objek dari Partner Produk
"""
### Jika parameter level tidak disebutkan
settings = get_settings()
qry = qry_vendor_produk()
qry = qry_vendor_produk().filter(Produk.kode == produk_kd)
# Jika parameter vendor_kd disebutkan maka secara explisit mengambil dari
# data vendor parameter secara default mengambil dari yang statusnya=1
if vendor_kd:
log.info(vendor_kd)
return qry \
.filter(Partner.kode == vendor_kd) \
.filter(Produk.kode == produk_kd).first()
if is_devel():
settings = get_settings()
vend_kd = 'dev_vend_kd' in settings and settings ['dev_vend_kd'] or 'test'
log.info(vend_kd)
return qry \
.filter(Partner.kode == vend_kd) \
.filter(Produk.kode == produk_kd).first()
qry = qry.filter(Partner.kode == vendor_kd)
else:
result = qry \
.filter(Produk.kode == produk_kd).order_by(PartnerProduk.harga)
row = result.filter(PartnerProduk.harga > harga).first()
if not row:
harga = 0
row = result.filter(PartnerProduk.harga > harga).first()
qry = qry.filter(PartnerProduk.status == 1)
return row
row = qry.first()
return row
@jsonrpc_method(method='inquiry', endpoint='api-merchant')
def inquiry(request, data, **kwargs):
"""
Digunakan untuk mendapatkan daftar produk
:param request:
:param data:
{
product_kd: string, //optional
cid:string //optional
}
:param token:
user_token
:return:
{
product_kd:string,
product_nm:string,
harga:integer,
admin:integer,
discount:integer
}
"""
"""
Digunakan untuk mendapatkan daftar produk
Digunakan untuk mendapatkan data tagihan
: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
:return:
{
"data": [{
"nopel": "530678910981",
"nama": "SUBCRIBER NAME",
"refno": "25641544",
"rincian":{
"pokok": 300000,
"denda": 0,
"admin": 2500,
"tarif": "R1\/1300VA",
"no_meter": "530678910012",
"power": "1300VA"
},
"subtotal": 302500,
"discount": 800,
"total": 301700
}]
}
"""
user = auth_from_rpc(request)
i = 0
......@@ -160,35 +139,25 @@ def inquiry(request, data, **kwargs):
produk_kd = 'denom' in prod and prod['denom'] or None
if not produk_kd:
raise JsonRpcProdukNotFoundError(message="Produk harus diisi")
vendor_produk = get_vendor_produk(produk_kd)
vendor_kd = 'vendor_kd' in prod and prod['vendor_kd'] or None
vendor_produk = get_vendor_produk(produk_kd, vendor_kd=vendor_kd)
if not vendor_produk:
raise JsonRpcProdukNotFoundError(message="Produk %s tidak ditemukan" % produk_kd)
partner_log = PartnerLog()
partner_log.vendor_id = vendor_produk.partner_id
partner_log.customer_id = customer.id
partner_log.produk_id = vendor_produk.produk.id
# partner_log.cust_inv = dat["inv_no"]
partner_log.id_pel = prod["id_pel"]
flush_row(partner_log)
raise JsonRpcProdukNotFoundError(
message="Produk %s tidak ditemukan" % produk_kd)
log.info("Vendor %s Produk %s Module %s" % (vendor_produk.partner.kode,
vendor_produk.produk.kode,
vendor_produk.modules))
values = dict(customer_id=customer.id,
id_pel=prod["id_pel"])
partner_log = save_partner_log(values, vendor_produk)
result = build_request('inquiry', vendor_produk, partner_log)
if result["code"] == 0:
prod.update(result)
result_code = "code" in result["f_result"] and result["f_result"]["code"] or None
if result_code:
raise JsonRpcError(message=result["f_result"]["message"])
# rincian = "rincian" in result and result["rincian"] or []
# if rincian:
# pokok = "pokok" in rincian and rincian["pokok"] or 0
# admin = result["jml_data"]*vendor_produk.produk.harga
# subtotal = pokok+admin
#
# discount = result["discount"] - result["jml_data"] * vendor_produk.produk.harga
# prod.update(dict(
# subtotal=result["subtotal"],
# discount=discount,
# total=result["subtotal"] - discount))
if result["f_result"]["code"] == 0:
prod.update(result)
else:
prod.update(dict(status="FAILED",
message=result["message"]))
......@@ -202,9 +171,6 @@ def build_purchase(vendor_produk, partner_log=None):
return build_request('payment', vendor_produk, partner_log)
from ..tools import JsonRpcInvoiceFoundError
@jsonrpc_method(method='purchase', endpoint='api-merchant')
def purchase(request, data, **kwargs):
"""
......@@ -365,9 +331,9 @@ def advice(request, data):
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()
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"
......
......@@ -9,13 +9,13 @@ from opensipkd.pasar.models import PartnerProduk, H2hArInvoiceDet
from ..vendor import VendorClass
import logging
log = logging.getLogger(__name__)
import urllib3
urllib3.disable_warnings()
class Vendor(VendorClass):
def __init__(self, vendor_produk, invoice_det):
VendorClass.__init__(self, vendor_produk, invoice_det=invoice_det)
......@@ -40,11 +40,10 @@ class Vendor(VendorClass):
# headers=self.get_headers(), timeout=15)
# # try:
# # pass
# except requests.exceptions.RequestException as e:
# resp = None
#
# return resp
# except requests.exceptions.RequestException as e:
# resp = None
#
# return resp
def inquiry(self):
if not self.v_produk_kd or not self.id_pel:
......@@ -81,7 +80,7 @@ class Vendor(VendorClass):
self.response = result
log.info("Inquiry Response: %s" % self.response)
if resp.status_code==200:
if resp.status_code == 200:
self.status = 1 # sukses
data = "data" in result and result["data"] or None
parsd = self.pars_data(data)
......@@ -100,8 +99,7 @@ class Vendor(VendorClass):
else:
self.status = -1
parsd = None
return self.set_response(parsd) #parsd
return self.set_response(parsd) # parsd
# def gagal_transaksi(self, inq):
# self.status = -2 # Try Other Vendor
......@@ -130,8 +128,8 @@ class Vendor(VendorClass):
parsd = None
if self.vendor_produk.produk.kategori.kode in ["e-payment", "e-voucher"]:
parsd = self.inquiry()
if parsd["code"]!=0:
self.status=-3
if parsd["code"] != 0:
self.status = -3
return self.set_response(typ="payment",
message="Data Tagihan Tidah ditemukan")
......@@ -141,15 +139,15 @@ class Vendor(VendorClass):
url = self.get_url("/prepaid/purchase")
try:
resp = requests.post(url, data=json.dumps(params), verify=False,
headers=self.get_headers(), timeout=15)
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
# todo: dibuat seolah menjadi belum di transaksikan
# todo: membuat cron untuk melakukan pengecekan transaksi
try:
result = json.loads(resp.text)
self.response = result
......@@ -198,19 +196,19 @@ class Vendor(VendorClass):
if data and "errors" in data:
msg = data["errors"][0]
pos = msg.find("Sisa saldo")
message=pos > -1 and msg[:pos] or msg
message = pos > -1 and msg[:pos] or msg
pos = message.find("SN: ")
sn = ""
if pos>-1:
if pos > -1:
sn_spl = message[pos:].split(" ")
sn = len(sn_spl)>1 and sn_spl[1] or ""
parsd["serial_number"]=sn
sn = len(sn_spl) > 1 and sn_spl[1] or ""
parsd["serial_number"] = sn
return self.set_failed(parsd, message=message)
elif resp.status_code == 401:
elif resp.status_code == 401:
self.status = -2
#todo: create cron yang status -2
# todo: create cron yang status -2
return self.set_pending(parsd)
def advice(self):
......@@ -235,8 +233,8 @@ class Vendor(VendorClass):
self.save_log("advice")
try:
resp = requests.get(url,params=params, verify=False,
headers=self.get_headers(), timeout=15)
resp = requests.get(url, params=params, verify=False,
headers=self.get_headers(), timeout=15)
except:
return self.set_response()
......@@ -314,7 +312,7 @@ class Vendor(VendorClass):
jml_period += 1
if "meter_changes" in inq:
meter += inq["meter_changes"]
i+=1
i += 1
rincian["pokok"] = pokok
rincian["denda"] = denda
......@@ -410,7 +408,7 @@ class Vendor(VendorClass):
self.amt_buy = result["total"]
harga_pokok = result["subtotal"] - rincian["admin"]
admin = int(self.vendor_produk.produk.harga*i)
admin = int(self.vendor_produk.produk.harga * i)
rincian["admin"] = admin
result["subtotal"] = int(harga_pokok) + admin
......
......@@ -49,6 +49,12 @@
<span class="menu-item-parent">Customer Invoice</span>
</a>
</li>
<li>
<a href="${request._host}/api/partner/list">
<i class="fa fa-lg fa-fw fa-home"></i>
<span class="menu-item-parent">Partner List</span>
</a>
</li>
</ul>
</html>
......@@ -14,7 +14,7 @@
<div class="col-md-8 col-md-offset-3 col-xs-12 well">
<div class="panel panel-danger">
<div class="panel-heading">
<h3 class="panel-title">SISTEM INFORMASI KELURAHAN</h3>
<h3 class="panel-title">MERCHANT MANGEMENT</h3>
</div>
</div>
</div>
......
<html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content">
<div class="panel-body">
<div class="col-md-6 col-md-offset-3 col-xs-12" style="background-color:white;">
<!-- Proses Template Form -->
<form method="post" accept-charset="utf-8" id="deform" class="form-horizontal"
enctype="multipart/form-data" tal:define="field form"
style="background-color:white;">
<input type="hidden" name="_charset_">
<input type="hidden" value="deform" name="__formid__">
<!-- Tampilan untuk general error -->
<div class="alert alert-danger" tal:condition="field.error">
<div class="errorMsgLbl" i18n:translate="">
Terdapat kesalahan pengisian
</div>
<p class="errorMsg">${field.errormsg}</p>
</div>
<!-- END Tampilan untuk general error -->
<div class="col-md-12">
<!-- Looping Semua Field-->
<div tal:repeat="f form">
<!-- Proses Saat Field hidden-->
<div tal:condition="f.widget.hidden">
${structure:f.serialize()}
</div>
<!-- Proses Saat Field Normal dan bukan Children-->
<div tal:condition="not f.widget.hidden and not f.children"
class="form-group" >
<!-- Field Reqired menggunakan class required -->
<label for="${f.oid}"
class="control-label col-md-4 ${f.required and 'required' or ''}"
id="req-${f.oid}">
${f.title}</label>
<div class="col-md-8">
${structure:f.serialize()}
<p id="error-${f.oid}" class="help-block" tal:condition="f.error"
tal:repeat="error f.error.messages()">
${error}</p>
</div>
</div>
<!-- Proses saat Form Adalah Children -->
<div tal:condition="f.children">
<!--div class="panel panel-default" title="">
<div class="panel-heading">${f.title}</div>
<div class="panel-body" -->
<input type="hidden"
name="__start__"
value="${f.name}:mapping"
readonly="readonly">
<div class="form-group" tal:repeat="f2 f.children">
<div id="item-${f2.oid}" >
<label for="${f2.oid}" id="req-${f2.oid}"
class="control-label col-md-4 ${f2.required and 'required' or ''}">
${f2.title}</label>
<div class="col-md-8">
${structure:f2.serialize()}
<p id="error-${f2.oid}" class="help-block" tal:condition="f2.error"
tal:repeat="error f2.error.messages()">
${error}</p>
</div>
</div>
</div>
<input type="hidden" name="__end__" value="${f.name}:mapping" readonly="readonly">
<!--/div>
</div>
</div-->
</div>
</div>
<div class="input-group-btn">
<button tal:repeat="fb form.buttons"
type="${fb.type}" class="btn ${fb.css_class} pull-right" name="${fb.name}">${fb.title}</button>
</div>
<label class="control-label text-danger">** Data di Isi sesuai dengan yang tertera pada KTP</label>
</div>
</form>
<!-- End Template Form -->
<!-- </div> -->
</div>
</div>
</div>
<div metal:fill-slot="scripts">
</div>
</html>
<html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content">
<div class="panel panel-danger">
<div class="panel-heading">
<h3 class="panel-title">Peringatan</h3>
</div>
<div class="panel-body">
${request.title} ID #${row.id} ?
</div>
</div>
<div tal:content="structure form"/>
</div>
</html>
<html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content">
<style>
button {
margin:0px 3px;
}
</style>
<div class="panel-body">
<div class="col-md-6 col-md-offset-3 col-xs-12 well">
<!-- Proses Template Form -->
<form method="post" accept-charset="utf-8" id="deform" class="form-horizontal"
enctype="multipart/form-data" tal:define="field form"
style="background-color:white;"
autocomplete="off">
<input type="hidden" name="_charset_">
<input type="hidden" value="deform" name="__formid__">
<!-- Tampilan untuk general error -->
<div class="alert alert-danger" tal:condition="field.error">
<div class="errorMsgLbl" i18n:translate="">
Terdapat kesalahan pengisian
</div>
<p class="errorMsg">${field.errormsg}</p>
</div>
<!-- END Tampilan untuk general error -->
<div class="col-md-12">
<!-- Looping Semua Field-->
<div tal:repeat="f form">
<!-- Proses Saat Field hidden-->
<div tal:condition="f.widget.hidden">
${structure:f.serialize()}
</div>
<!-- Proses Saat Field Normal dan bukan Children-->
<div tal:condition="not f.widget.hidden and not f.children"
class="form-group" >
<!-- Field Reqired menggunakan class required -->
<label for="${f.oid}"
class="control-label col-md-4 ${f.required and 'required' or ''}"
id="req-${f.oid}">
${f.title}</label>
<div class="col-md-8">
${structure:f.serialize()}
<p id="error-${f.oid}" class="help-block" tal:condition="f.error"
tal:repeat="error f.error.messages()">
${error}</p>
</div>
</div>
<!-- Proses saat Form Adalah Children -->
<div tal:condition="f.children">
<!--div class="panel panel-default" title="">
<div class="panel-heading">${f.title}</div>
<div class="panel-body" -->
<input type="hidden"
name="__start__"
value="${f.name}:mapping"
readonly="readonly">
<div class="form-group" tal:repeat="f2 f.children">
<div id="item-${f2.oid}" >
<label for="${f2.oid}" id="req-${f2.oid}"
class="control-label col-md-4 ${f2.required and 'required' or ''}">
${f2.title}</label>
<div class="col-md-8">
${structure:f2.serialize()}
<p id="error-${f2.oid}" class="help-block" tal:condition="f2.error"
tal:repeat="error f2.error.messages()">
${error}</p>
</div>
</div>
</div>
<input type="hidden" name="__end__" value="${f.name}:mapping" readonly="readonly">
<!--/div>
</div>
</div-->
</div>
</div>
<div class="input-group-btn">
<button tal:repeat="fb form.buttons"
type="${fb.type}" class="btn ${fb.css_class} pull-right" name="${fb.name}">${fb.title}</button>
</div>
<label class="control-label text-danger">** Data di Isi sesuai dengan yang tertera pada KTP</label>
</div>
</form>
<!-- End Template Form -->
<!-- </div> -->
</div>
</div>
</div>
<div metal:fill-slot="scripts">
</div>
</html>
<html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content">
<div class="jarviswidget" style="border-top:1px solid #ccc!important">
<div role="content">
<table id="table1" class="table table-bordered table-hover table-condensed">
<thead>
<tr>
<th>ID</th>
<th>Kode</th>
<th>Uraian</th>
<th>Vendor</th>
<th>Customer</th>
<th>Status</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
<div metal:fill-slot="scripts">
<script>
var mID;
var mThn;
var oTable;
var iPos;
var oTableUrl = "${request._host}/api/partner";
var oTableUri = oTableUrl+"/grid/act";
$(document).ready(function () {
oTable = $('#table1').DataTable({
dom : '<"row"<"col-md-8"<"toolbar">Bl><"col-md-4"fr>>tip',
processing : true,
serverSide : true,
ajax : oTableUri,
stateSave : true,
scrollCollapse: true,
sort : true,
info : false,
filter : true,
autoWidth : false,
paginate : true,
paginationType: "full_numbers",
lengthMenu: [
[10, 25, 50, 100],
[10, 25, 50, 100]
],
columnDefs: [{
searchable: false,
visible: false,
targets: [0]
}],
columns: [
{ "data": "id" },
{ "data": "kode", "width": "150px", "class":"left"},
{ "data": "nama" },
{ "data": "is_vendor", "width": "100px", "class":"left" },
{ "data": "is_customer", "width": "100px", "class":"left" },
{ "data": "status", "width": "100px", "class":"center"}
],
"language": {
"search" : "Cari: ",
"paginate":{
"first" : "Awal ",
"last" : "Akhir ",
"previous": "Mundur ",
"next" : "Maju ",
},
"lengthMenu": " _MENU_ baris "
}
});
var tb_array = [
'<div class="btn-group pull-left">',
' <button id="btn_add" class="btn btn btn-success" type="button">Tambah</button>',
' <button id="btn_edt" class="btn btn btn-warning" type="button">Koreksi</button>',
' <button id="btn_del" class="btn btn btn-danger" type="button">Hapus</button>',
' <button id="btn_print" class="btn btn btn-primary" type="button">Cetak</button>',
' <button id="btn_csv" class="btn btn btn-primary" type="button">CSV</button>',
' <button id="btn_close" class="btn btn btn-warning" type="button">Tutup</button>',
' &nbsp;',
'</div>',
];
var tb = tb_array.join(' ');
$("div.toolbar").html(tb);
$("div.toolbar").attr('style', 'display:block; float: left; margin-bottom:6px; line-height:16px;');
$('#table1 tbody').on('click', 'tr', function () {
if ($(this).hasClass('selected')) {
$(this).removeClass('selected');
} else {
var aData = oTable.row( this ).data();
oTable.$('tr.selected').removeClass('selected');
$(this).addClass('selected');
mID = aData.id;
console.log(mID);
//oTable.$('tr.row_selected').removeClass('row_selected');
//$(this).addClass('row_selected');
}
});
$('#btn_add').click(function () {
window.location = oTableUrl+'/add';
});
$('#btn_edt').click(function () {
if (mID) window.location = oTableUrl+'/'+mID+'/edit';
else alert('Pilih Baris yang akan di koreksi');
});
$('#btn_del').click(function () {
if (mID) window.location = oTableUrl+'/'+mID+'/delete';
else alert('Pilih Baris yang akan di hapus');
});
$('#btn_print').click(function () {
url = oTableUrl+"/pdf/rpt";
window.open(url);
});
$('#btn_csv').click(function () {
url = oTableUrl+"/csv/rpt";
window.open(url);
});
$("#btn_close").click(function () {
window.location = '/';
return false;
});
})
</script>
</div>
</html>
#
# def vendor():
# return DBSession.query(Partner.id, Partner.nama) \
# .filter(Partner.is_vendor == 1).all()
#
#
# def customer():
# return DBSession.query(Partner.id, Partner.nama) \
# .filter(Partner.is_customer == 1).all()
#
#
# def produk():
# return DBSession.query(Produk.id, Produk.nama) \
# .join(ProdukKategori, Produk.kategori_id == ProdukKategori.id) \
# .filter(ProdukKategori.kode.in_(['e-pulsa', 'e-voucher', 'e-payment'])).all()
#
#
# def build_request(typ, values):
# produk_id = values['produk_id']
# vendor_id = values['vendor_id']
# bill_no = values['destination']
# customer_id = 'customer_id' in values and values['customer_id'] or None
# 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) \
# .filter(PartnerProduk.partner_id == vendor_id,
# PartnerProduk.produk_id == produk_id).first()
# if not vendor_product:
# 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')
#
# cls_module = modules.Vendor(vendor_product, bill_no, customer_id,
# cust_trx_id, row)
#
# cls = hasattr(cls_module, typ) and getattr(cls_module, typ) or None
# if cls:
# data = cls()
# result = dict(data=data)
# result["f_request"] = cls_module.request
# result["f_response"] = cls_module.response
# result["url"] = cls_module.url
# else:
# result = dict(data=dict(error='Fungsi %s tidak ada' % typ,
# code=9999))
# return result
#
#
#
# @colander.deferred
# def deferred_vendor(node, kw):
# values = kw.get('vendor', [])
# return widget.SelectWidget(values=values)
#
#
# @colander.deferred
# def deferred_customer(node, kw):
# values = kw.get('customer', [])
# return widget.SelectWidget(values=values)
#
#
# @colander.deferred
# def deferred_produk(node, kw):
# values = kw.get('produk', [])
# return widget.SelectWidget(values=values)
import json
import colander
from deform import widget, Form, ValidationFailure
......@@ -83,11 +11,13 @@ from pyramid.view import view_config
from ..tools import get_settings, btn_purchase
from ..tools import btn_inquiry, btn_reset, btn_payment, btn_advice, btn_next
from .merchant import build_request, qry_vendor_produk
from .api_merchant import build_request, qry_vendor_produk, save_partner_log
import logging
log = logging.getLogger(__name__)
class AddSchema(colander.Schema):
customer_id = colander.SchemaNode(
colander.Integer(), title='Customer',
......@@ -125,7 +55,6 @@ class AddSchema(colander.Schema):
widget=widget.TextInputWidget(css_class="readonly")
)
f_result = colander.SchemaNode(
colander.String(), title='Result',
missing=colander.drop,
......@@ -205,10 +134,12 @@ $(document).ready(function(){
});
""")
def query_id(request):
id = request.matchdict['id']
return PartnerLog.query_id(id)
def save_ar_invoice(values, vendor_produk):
invoice = H2hArInvoice.query() \
.filter_by(cust_inv_no=values['cust_inv_no']).first()
......@@ -229,19 +160,6 @@ def save_ar_invoice(values, vendor_produk):
flush_row(invoice_det)
return invoice_det
def save_partner_log(values, vendor_produk):
partner_log = PartnerLog()
partner_log.vendor_id = vendor_produk.partner_id
partner_log.customer_id = values["customer_id"]
partner_log.produk_id = vendor_produk.produk.id
# partner_log.cust_inv = dat["inv_no"]
partner_log.id_pel = values["id_pel"]
flush_row(partner_log)
return partner_log
class ViewHome(BaseView):
@view_config(route_name='api-vendor-doc',
permission="api-vendor-doc",
......@@ -279,8 +197,8 @@ class ViewHome(BaseView):
return dict(form=form, params=form_params_view)
if 'inquiry' in request.POST:
invoice_det = save_partner_log(values, vendor_produk)
result = build_request('inquiry', vendor_produk, invoice_det)
partner_log = save_partner_log(values, vendor_produk)
result = build_request('inquiry', vendor_produk, partner_log)
elif 'purchase' in request.POST:
invoice_det = save_ar_invoice(values, vendor_produk)
......@@ -290,14 +208,11 @@ class ViewHome(BaseView):
invoice_det = save_ar_invoice(values, vendor_produk)
result = build_request('advice', vendor_produk, invoice_det)
elif 'payment' in request.POST:
elif 'register' in request.POST:
pass
# invoice_det = get_invoice(values, vendor_produk)
# result = build_request('payment', vendor_produk, invoice_det)
# elif 'info' in request.POST:
# invoice, invoice_det = save_ar_invoice(values, vendor_produk)
# result = build_request('info', vendor_produk, invoice)
elif 'payment' in request.POST:
pass
if result:
values.update(result)
......@@ -319,38 +234,110 @@ class ViewHome(BaseView):
form.render(values)
return dict(form=form, params=form_params_edit)
@view_config(route_name='api-vendor-view',
permission="api-vendor-view",
renderer='templates/form.pt')
def view_edit(self):
request = self.req
session = self.ses
form = get_form(request, AddSchema)
row = query_id(request).first()
if not row:
return id_not_found(request)
if request.POST:
controls = request.POST.items()
try:
c = form.validate(controls)
except ValidationFailure as e:
form.set_appstruct(e.cstruct)
return dict(form=form, params=form_params_detail)
# @view_config(route_name='api-vendor-view',
# permission="api-vendor-view",
# renderer='templates/form.pt')
# def view_edit(self):
# request = self.req
# session = self.ses
# form = get_form(request, AddSchema)
# row = query_id(request).first()
# if not row:
# return id_not_found(request)
# if request.POST:
# controls = request.POST.items()
# try:
# c = form.validate(controls)
# except ValidationFailure as e:
# form.set_appstruct(e.cstruct)
# return dict(form=form, params=form_params_detail)
#
# values = dict(c.items())
# save_request(request, values, row)
# return route_list(request)
# valus = row.to_dict()
# values = {}
#
# for val in valus:
# if valus[val] != None:
# values[val] = valus[val]
# # values['npwpd']= get_npwpd(row.customer_id)
# values['id_pel'] = row.id_pel
# form.render(values)
# return dict(form=form, params=form_params_detail)
values = dict(c.items())
save_request(request, values, row)
return route_list(request)
valus = row.to_dict()
values = {}
for val in valus:
if valus[val] != None:
values[val] = valus[val]
# values['npwpd']= get_npwpd(row.customer_id)
values['id_pel'] = row.id_pel
form.render(values)
return dict(form=form, params=form_params_detail)
def get_row(id):
return PartnerLog.query().filter_by(id=id).first()
#
# def vendor():
# return DBSession.query(Partner.id, Partner.nama) \
# .filter(Partner.is_vendor == 1).all()
#
#
# def customer():
# return DBSession.query(Partner.id, Partner.nama) \
# .filter(Partner.is_customer == 1).all()
#
#
# def produk():
# return DBSession.query(Produk.id, Produk.nama) \
# .join(ProdukKategori, Produk.kategori_id == ProdukKategori.id) \
# .filter(ProdukKategori.kode.in_(['e-pulsa', 'e-voucher', 'e-payment'])).all()
#
#
# def build_request(typ, values):
# produk_id = values['produk_id']
# vendor_id = values['vendor_id']
# bill_no = values['destination']
# customer_id = 'customer_id' in values and values['customer_id'] or None
# 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) \
# .filter(PartnerProduk.partner_id == vendor_id,
# PartnerProduk.produk_id == produk_id).first()
# if not vendor_product:
# 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')
#
# cls_module = modules.Vendor(vendor_product, bill_no, customer_id,
# cust_trx_id, row)
#
# cls = hasattr(cls_module, typ) and getattr(cls_module, typ) or None
# if cls:
# data = cls()
# result = dict(data=data)
# result["f_request"] = cls_module.request
# result["f_response"] = cls_module.response
# result["url"] = cls_module.url
# else:
# result = dict(data=dict(error='Fungsi %s tidak ada' % typ,
# code=9999))
# return result
#
#
#
# @colander.deferred
# def deferred_vendor(node, kw):
# values = kw.get('vendor', [])
# return widget.SelectWidget(values=values)
#
#
# @colander.deferred
# def deferred_customer(node, kw):
# values = kw.get('customer', [])
# return widget.SelectWidget(values=values)
#
#
# @colander.deferred
# def deferred_produk(node, kw):
# values = kw.get('produk', [])
# return widget.SelectWidget(values=values)
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!