Commit 26e8cb7c by Tatang

purchase payment

1 parent 6aa5f382
...@@ -4,6 +4,7 @@ from deform import widget, Form, ValidationFailure ...@@ -4,6 +4,7 @@ from deform import widget, Form, ValidationFailure
from opensipkd.base.views import DataTables from opensipkd.base.views import DataTables
from pyramid.httpexceptions import HTTPFound from pyramid.httpexceptions import HTTPFound
from pyramid.view import view_config from pyramid.view import view_config
from sqlalchemy import case
from sqlalchemy.orm import aliased from sqlalchemy.orm import aliased
from . import BaseView from . import BaseView
...@@ -12,7 +13,7 @@ from opensipkd.base.tools import format_json ...@@ -12,7 +13,7 @@ from opensipkd.base.tools import format_json
from opensipkd.base.tools.db import column_concat from opensipkd.base.tools.db import column_concat
status_payment = ( status_payment = (
(-1, '--Semua--'), (9999, '--Semua--'),
(0, 'Pending'), (0, 'Pending'),
(1, 'Sukses'), (1, 'Sukses'),
(2, 'Batal'), (2, 'Batal'),
...@@ -40,7 +41,7 @@ class ViewData(BaseView): ...@@ -40,7 +41,7 @@ class ViewData(BaseView):
params = { params = {
'form': form, 'form': form,
'status_payment': [s for k, s in status_payment if k > -1], 'status_payment': [s for k, s in status_payment if k != 9999],
'columns': [ 'columns': [
dict(title="ID"), dict(title="ID"),
dict(title="No. Invoice"), dict(title="No. Invoice"),
...@@ -79,7 +80,7 @@ class ViewData(BaseView): ...@@ -79,7 +80,7 @@ class ViewData(BaseView):
url_dict = request.matchdict url_dict = request.matchdict
act = url_dict['act'] act = url_dict['act']
if act == "grid": if act == "grid":
status = -1 status = 9999
if 'status' in request.params: if 'status' in request.params:
status = int(request.params['status']) status = int(request.params['status'])
...@@ -100,13 +101,21 @@ class ViewData(BaseView): ...@@ -100,13 +101,21 @@ class ViewData(BaseView):
), ),
ColumnDT(vendor.nama, mData='vendor'), ColumnDT(vendor.nama, mData='vendor'),
ColumnDT(PartnerPay.amt_sell, mData='amount'), ColumnDT(PartnerPay.amt_sell, mData='amount'),
ColumnDT(PartnerPay.status, mData='status'), ColumnDT(case(
[
(PartnerPay.status <= 0, 0)
],
else_=PartnerPay.status
), mData='status'),
] ]
query = DBSession.query().select_from(PartnerPay)\ query = DBSession.query().select_from(PartnerPay)\
.join(vendor, vendor.id == PartnerPay.vendor_id)\ .join(vendor, vendor.id == PartnerPay.vendor_id)\
.join(customer, customer.id == PartnerPay.customer_id) .join(customer, customer.id == PartnerPay.customer_id)
if status > -1: if status != 9999:
query = query.filter(PartnerPay.status == status) if status <= 0:
query = query.filter(PartnerPay.status <= status)
else:
query = query.filter(PartnerPay.status == status)
row_table = DataTables(request.GET, query, columns) row_table = DataTables(request.GET, query, columns)
return row_table.output_result() return row_table.output_result()
......
...@@ -4,14 +4,21 @@ from deform import widget, Form, ValidationFailure ...@@ -4,14 +4,21 @@ from deform import widget, Form, ValidationFailure
from opensipkd.base.views import DataTables from opensipkd.base.views import DataTables
from pyramid.httpexceptions import HTTPFound from pyramid.httpexceptions import HTTPFound
from pyramid.view import view_config from pyramid.view import view_config
from sqlalchemy import func from sqlalchemy import func, case
from . import BaseView from . import BaseView
from ..models import (DBSession, H2hArInvoice, H2hArInvoiceDet, Partner) from ..models import (DBSession, H2hArInvoice, H2hArInvoiceDet, Partner, Produk)
from opensipkd.base.tools import format_json from opensipkd.base.tools import format_json
status_purchase = (
(9999, '--Semua--'),
(0, 'Pending'),
(1, 'Sukses'),
(2, 'Batal'),
)
invoice_type = ( invoice_type = (
(0, '--None--'), (0, '--Semua--'),
(1, 'Payment'), (1, 'Payment'),
(2, 'Register'), (2, 'Register'),
) )
...@@ -30,7 +37,15 @@ class ViewData(BaseView): ...@@ -30,7 +37,15 @@ class ViewData(BaseView):
inv_type = colander.SchemaNode( inv_type = colander.SchemaNode(
colander.Integer(), colander.Integer(),
default=1, default=1,
oid="inv_type", widget=widget.SelectWidget(values=invoice_type, css_class='form-toolbar') oid="inv_type",
widget=widget.SelectWidget(values=invoice_type, css_class='form-toolbar'),
title="Jenis"
)
status = colander.SchemaNode(
colander.String(),
oid="status",
widget=widget.SelectWidget(values=status_purchase, css_class='form-toolbar'),
title="Status"
) )
toolbar = ToolbarSchema(Validator=form_validator) toolbar = ToolbarSchema(Validator=form_validator)
...@@ -40,17 +55,24 @@ class ViewData(BaseView): ...@@ -40,17 +55,24 @@ class ViewData(BaseView):
params = { params = {
'form': form, 'form': form,
'invoice_type': [k and s or '-' for k, s in invoice_type], 'invoice_type': [k and s or '-' for k, s in invoice_type],
'status_purchase': [s for k, s in status_purchase if k != 9999],
'columns': [ 'columns': [
dict(title="ID"), dict(title="ID"),
dict(title="No. Invoice"), dict(title="No. Invoice"),
dict(title="Customer"), dict(title="Customer"),
dict(title="Jenis"), dict(title="Jenis"),
dict(title="Produk"),
dict(title="Harga"),
dict(title="Status"),
], ],
'column_data': [ 'column_data': [
dict(data="id", width="0px"), dict(data="id", width="0px"),
dict(data="nomor", width="150px"), dict(data="nomor", width="150px"),
dict(data="customer"), dict(data="customer"),
dict(data="inv_type", width="100px"), dict(data="inv_type", width="100px"),
dict(data="produk"),
dict(data="harga", width="100px"),
dict(data="status", width="100px"),
], ],
'buttons': [ 'buttons': [
dict(id="btn_view", cls="btn btn btn-primary", title="View"), dict(id="btn_view", cls="btn btn btn-primary", title="View"),
...@@ -75,16 +97,34 @@ class ViewData(BaseView): ...@@ -75,16 +97,34 @@ class ViewData(BaseView):
act = url_dict['act'] act = url_dict['act']
if act == "grid": if act == "grid":
jenis = 'jenis' in request.params and request.params['jenis'] and int(request.params['jenis']) or None jenis = 'jenis' in request.params and request.params['jenis'] and int(request.params['jenis']) or None
status = 9999
if 'status' in request.params:
status = int(request.params['status'])
columns = [ columns = [
ColumnDT(H2hArInvoice.id, mData='id'), ColumnDT(H2hArInvoiceDet.id, mData='id'),
ColumnDT(H2hArInvoice.cust_inv_no, mData='nomor'), ColumnDT(H2hArInvoice.cust_inv_no, mData='nomor'),
ColumnDT(Partner.nama, mData='customer'), ColumnDT(Partner.nama, mData='customer'),
ColumnDT(func.coalesce(H2hArInvoice.cust_inv_type, 0), mData='inv_type'), ColumnDT(func.coalesce(H2hArInvoice.cust_inv_type, 0), mData='inv_type'),
ColumnDT(Produk.nama, mData='produk'),
ColumnDT(H2hArInvoiceDet.amt_sell, mData='harga'),
ColumnDT(case(
[
(H2hArInvoiceDet.status <= 0, 0)
],
else_=H2hArInvoiceDet.status
), mData='status'),
] ]
query = DBSession.query().select_from(H2hArInvoice)\ query = DBSession.query().select_from(H2hArInvoice) \
.join(Partner, Partner.id == H2hArInvoice.customer_id) .join(H2hArInvoiceDet, H2hArInvoiceDet.ar_invoice_id == H2hArInvoice.id) \
.join(Partner, Partner.id == H2hArInvoice.customer_id) \
.join(Produk, Produk.id == H2hArInvoiceDet.produk_id)
query = query.filter(H2hArInvoice.cust_inv_type == jenis) query = query.filter(H2hArInvoice.cust_inv_type == jenis)
if status != 9999:
if status <= 0:
query = query.filter(H2hArInvoiceDet.status <= status)
else:
query = query.filter(H2hArInvoiceDet.status == status)
row_table = DataTables(request.GET, query, columns) row_table = DataTables(request.GET, query, columns)
return row_table.output_result() return row_table.output_result()
...@@ -95,19 +135,21 @@ class ViewData(BaseView): ...@@ -95,19 +135,21 @@ class ViewData(BaseView):
request = self.req request = self.req
url_dict = request.matchdict url_dict = request.matchdict
view_id = url_dict['id'] view_id = url_dict['id']
data = H2hArInvoice.query_id(id=view_id).first() data = H2hArInvoiceDet.query_id(id=view_id).first()
params = dict( params = dict(
form=None form=None
) )
if data: if data:
invoice = data.h2h_ar_invoice
customer = invoice.customer
form_list = ( form_list = (
('inv_no', data.cust_inv_no or '', 'text'), ('inv_no', invoice.cust_inv_no or '', 'text'),
('customer', data.customer.nama, 'text'), ('customer', customer.nama, 'text'),
('harga', data.amt_sell or 0, 'text'),
('amount', data.amount or 0, 'text'),
('inquiry', format_json(data.inquiry), 'textarea'), ('inquiry', format_json(data.inquiry), 'textarea'),
('payment', format_json(data.payment), 'textarea'), ('payment', format_json(data.payment), 'textarea'),
('advice', format_json(data.advice), 'textarea'), ('advice', format_json(data.advice), 'textarea'),
('notify', format_json(data.notify), 'textarea'),
) )
sm = colander.Schema() sm = colander.Schema()
......
...@@ -7,8 +7,11 @@ ...@@ -7,8 +7,11 @@
overflow-y: auto; overflow-y: auto;
} }
</style> </style>
<div id="tmp-toolbar"> <div id="tmp-toolbar" style="display: inline-block;">
<span tal:repeat="f params.form" tal:omit-tag=""> <span tal:repeat="f params.form" tal:omit-tag="">
<label for="${f.oid}" class="control-label">
${f.title}
</label>
${structure:f.serialize()} ${structure:f.serialize()}
</span> </span>
</div> </div>
...@@ -82,20 +85,20 @@ ...@@ -82,20 +85,20 @@
[10, 25, 50, 100], [10, 25, 50, 100],
[10, 25, 50, 100] [10, 25, 50, 100]
], ],
// columns: [ columns: [
// {'data': 'id', 'width': '0px'}, {'data': 'id', 'width': '0px'},
// {'data': 'nomor', 'width': '150px'}, {'data': 'nomor', 'width': '150px'},
// {'data': 'customer'}, {'data': 'customer'},
// {'data': 'vendor'}, {'data': 'vendor'},
// {'data': 'amount', 'width': '100px'}, {'data': 'amount', 'width': '100px'},
// {'data': 'status', 'width': '100px', {'data': 'status', 'width': '100px',
// 'render': function(data, type, full, meta) { 'render': function(data, type, full, meta) {
// var st = ${params.status_payment}; var st = ${params.status_payment};
// return st[data]; return st[data];
// } }
// } }
// ], ],
columns: ${params.column_data}, //columns: ${params.column_data},
columnDefs: [{ columnDefs: [{
searchable: false, searchable: false,
visible: false, visible: false,
...@@ -128,8 +131,7 @@ ...@@ -128,8 +131,7 @@
var tb = tb_array.join(' '); var tb = tb_array.join(' ');
$("div.toolbar").html(tb) $("div.toolbar").html(tb)
.attr('style', 'display:block; float: left; margin-bottom:6px; line-height:16px;'); .attr('style', 'display:block; float: left; margin-bottom:6px; line-height:16px;');
$('select.form-toolbar').appendTo($("div.toolbar")); $('#tmp-toolbar').appendTo($("div.toolbar"));
$('tmp-toolbar').hide();
//events //events
$('#table1 tbody').on('click', 'tr', function() { $('#table1 tbody').on('click', 'tr', function() {
......
...@@ -7,8 +7,11 @@ ...@@ -7,8 +7,11 @@
overflow-y: auto; overflow-y: auto;
} }
</style> </style>
<div id="tmp-toolbar"> <div id="tmp-toolbar" style="display: inline-block;">
<span tal:repeat="f params.form" tal:omit-tag=""> <span tal:repeat="f params.form" tal:omit-tag="">
<label for="${f.oid}" class="control-label">
${f.title}
</label>
${structure:f.serialize()} ${structure:f.serialize()}
</span> </span>
</div> </div>
...@@ -56,8 +59,9 @@ ...@@ -56,8 +59,9 @@
var oTableUrl = oTableUri + "/grid/act"; var oTableUrl = oTableUri + "/grid/act";
function getDataUrl() { function getDataUrl() {
var opt = $('select#inv_type').val(); var jns = $('select#inv_type').val();
return oTableUrl + '?jenis=' + opt.toString(); var sts = $('select#status').val();
return oTableUrl + '?jenis=' + jns.toString() + '&status=' + sts.toString();
} }
function getViewUrl(vid) { function getViewUrl(vid) {
...@@ -91,6 +95,14 @@ ...@@ -91,6 +95,14 @@
var st = ${params.invoice_type}; var st = ${params.invoice_type};
return st[data]; return st[data];
} }
},
{'data': 'produk'},
{'data': 'harga', 'width': '100px'},
{'data': 'status', 'width': '100px',
'render': function(data, type, full, meta) {
var st = ${params.status_purchase};
return st[data];
}
} }
], ],
//columns: ${params.column_data}, //columns: ${params.column_data},
...@@ -126,9 +138,8 @@ ...@@ -126,9 +138,8 @@
var tb = tb_array.join(' '); var tb = tb_array.join(' ');
$("div.toolbar").html(tb) $("div.toolbar").html(tb)
.attr('style', 'display:block; float: left; margin-bottom:6px; line-height:16px;'); .attr('style', 'display:block; float: left; margin-bottom:6px; line-height:16px;');
$('select.form-toolbar').appendTo($("div.toolbar")); $('#tmp-toolbar').appendTo($("div.toolbar"));
$('tmp-toolbar').hide();
//events //events
$('#table1 tbody').on('click', 'tr', function() { $('#table1 tbody').on('click', 'tr', function() {
if ($(this).hasClass('selected')) { if ($(this).hasClass('selected')) {
...@@ -170,7 +181,7 @@ ...@@ -170,7 +181,7 @@
} }
}); });
$('select#inv_type').on('change', function() { $('select#inv_type,select#status').on('change', function() {
mID = 0; mID = 0;
oTable.ajax.url(getDataUrl()).load(); oTable.ajax.url(getDataUrl()).load();
}); });
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!