queries to server side
This commit is contained in:
parent
2e3c06e66d
commit
f52dc07a58
@ -15,8 +15,11 @@
|
|||||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
cur_frm.set_query("default_account", function(doc) {
|
cur_frm.set_query("default_account", function(doc) {
|
||||||
return erpnext.queries.account({
|
return{
|
||||||
account_type: "Bank or Cash",
|
query: "controllers.queries.account_query",
|
||||||
company: doc.company
|
filters: {
|
||||||
});
|
'account_type': "Bank or Cash",
|
||||||
|
'company': doc.company
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
@ -313,14 +313,16 @@ cur_frm.fields_dict['territory'].get_query = function(doc,cdt,cdn) {
|
|||||||
// Income Account in Details Table
|
// Income Account in Details Table
|
||||||
// --------------------------------
|
// --------------------------------
|
||||||
cur_frm.set_query("income_account", "entries", function(doc) {
|
cur_frm.set_query("income_account", "entries", function(doc) {
|
||||||
return 'SELECT tabAccount.name FROM tabAccount WHERE (tabAccount.debit_or_credit="Credit" OR tabAccount.account_type = "Income Account") AND tabAccount.group_or_ledger="Ledger" AND tabAccount.docstatus!=2 AND tabAccount.company="'+doc.company+'" AND tabAccount.%(key)s LIKE "%s"';
|
return{
|
||||||
})
|
query: "accounts.doctype.sales_invoice.sales_invoice.get_income_account",
|
||||||
|
filters: {'company': doc.company}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// expense account
|
// expense account
|
||||||
if (sys_defaults.auto_inventory_accounting) {
|
if (sys_defaults.auto_inventory_accounting) {
|
||||||
cur_frm.fields_dict['entries'].grid.get_field('expense_account').get_query = function(doc) {
|
cur_frm.fields_dict['entries'].grid.get_field('expense_account').get_query = function(doc) {
|
||||||
return {
|
return {
|
||||||
// "query": "accounts.utils.get_account_list",
|
|
||||||
filters: {
|
filters: {
|
||||||
'is_pl_account': 'Yes',
|
'is_pl_account': 'Yes',
|
||||||
'debit_or_credit': 'Debit',
|
'debit_or_credit': 'Debit',
|
||||||
|
@ -984,3 +984,14 @@ def get_bank_cash_account(mode_of_payment):
|
|||||||
return {
|
return {
|
||||||
"cash_bank_account": val
|
"cash_bank_account": val
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def get_income_account(doctype, txt, searchfield, start, page_len, filters):
|
||||||
|
from controllers.queries import get_match_cond
|
||||||
|
|
||||||
|
return webnotes.conn.sql("""select tabAccount.name from `tabAccount`
|
||||||
|
where (tabAccount.debit_or_credit="Credit"
|
||||||
|
or tabAccount.account_type = "Income Account")
|
||||||
|
and tabAccount.group_or_ledger="Ledger" and tabAccount.docstatus!=2
|
||||||
|
and tabAccount.company = '%(company)s' and tabAccount.%(key)s LIKE '%(txt)s'
|
||||||
|
%(mcond)s""" % {'company': filters['company'], 'key': searchfield,
|
||||||
|
'txt': "%%%s%%" % txt, 'mcond':get_match_cond(doctype, searchfield)})
|
@ -28,27 +28,37 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({
|
|||||||
|
|
||||||
if(this.frm.fields_dict.price_list_name) {
|
if(this.frm.fields_dict.price_list_name) {
|
||||||
this.frm.set_query("price_list_name", function() {
|
this.frm.set_query("price_list_name", function() {
|
||||||
return repl("select name, currency from `tabPrice List` \
|
return{
|
||||||
where buying_or_selling = 'Buying' and name like \"%s%%\"");
|
filters: { 'buying_or_selling': "Buying" }
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
this.frm.set_query("price_list_currency", function() {
|
this.frm.set_query("price_list_currency", function() {
|
||||||
return repl("select distinct ref_currency from `tabItem Price` \
|
return{
|
||||||
where price_list_name=\"%(price_list_name)s\" and buying_or_selling = 'Buying' \
|
filters: {
|
||||||
and ref_currency like \"%s%%\"",
|
'price_list_name': me.frm.doc.price_list_name,
|
||||||
{price_list_name: me.frm.doc.price_list_name});
|
'buying_or_selling': "Buying"
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if(this.frm.fields_dict.supplier) {
|
if(this.frm.fields_dict.supplier) {
|
||||||
this.frm.set_query("supplier", erpnext.utils.supplier_query);
|
this.frm.set_query("supplier", function() {
|
||||||
|
return{ query:"controllers.queries.supplier_query" }});
|
||||||
}
|
}
|
||||||
|
|
||||||
this.frm.set_query("item_code", this.frm.cscript.fname, function() {
|
this.frm.set_query("item_code", this.frm.cscript.fname, function() {
|
||||||
if(me.frm.doc.is_subcontracted == "Yes") {
|
if(me.frm.doc.is_subcontracted == "Yes") {
|
||||||
return erpnext.queries.item({'ifnull(tabItem.is_sub_contracted_item, "No")': "Yes"});
|
return{
|
||||||
|
query:"controllers.queries.item_query",
|
||||||
|
filters:{ 'is_sub_contracted_item': 'Yes' }
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
return erpnext.queries.item({'ifnull(tabItem.is_purchase_item, "No")': "Yes"});
|
return{
|
||||||
|
query:"controllers.queries.item_query",
|
||||||
|
filters:{ 'is_purchase_item': 'Yes' }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
@ -20,7 +20,13 @@ import webnotes
|
|||||||
def get_filters_cond(doctype, filters, conditions):
|
def get_filters_cond(doctype, filters, conditions):
|
||||||
if filters:
|
if filters:
|
||||||
if isinstance(filters, dict):
|
if isinstance(filters, dict):
|
||||||
filters = map(lambda f: [doctype, f[0], "=", f[1]], filters.items())
|
filters = filters.items()
|
||||||
|
flt = []
|
||||||
|
for f in filters:
|
||||||
|
if f[1][0] == '!':
|
||||||
|
flt.append([doctype, f[0], '!=', f[1][1:]])
|
||||||
|
else:
|
||||||
|
flt.append([doctype, f[0], '=', f[1]])
|
||||||
|
|
||||||
from webnotes.widgets.reportview import build_filter_conditions
|
from webnotes.widgets.reportview import build_filter_conditions
|
||||||
build_filter_conditions(filters, conditions)
|
build_filter_conditions(filters, conditions)
|
||||||
@ -36,6 +42,7 @@ def get_match_cond(doctype, searchfield = 'name'):
|
|||||||
|
|
||||||
from webnotes.widgets.reportview import build_match_conditions
|
from webnotes.widgets.reportview import build_match_conditions
|
||||||
cond = build_match_conditions(doctype, fields)
|
cond = build_match_conditions(doctype, fields)
|
||||||
|
|
||||||
if cond:
|
if cond:
|
||||||
cond = ' and ' + cond
|
cond = ' and ' + cond
|
||||||
else:
|
else:
|
||||||
@ -81,10 +88,12 @@ def lead_query(doctype, txt, searchfield, start, page_len, filters):
|
|||||||
# searches for customer
|
# searches for customer
|
||||||
def customer_query(doctype, txt, searchfield, start, page_len, filters):
|
def customer_query(doctype, txt, searchfield, start, page_len, filters):
|
||||||
cust_master_name = webnotes.defaults.get_user_default("cust_master_name")
|
cust_master_name = webnotes.defaults.get_user_default("cust_master_name")
|
||||||
|
|
||||||
if cust_master_name == "Customer Name":
|
if cust_master_name == "Customer Name":
|
||||||
fields = ["name", "customer_group", "territory"]
|
fields = ["name", "customer_group", "territory"]
|
||||||
else:
|
else:
|
||||||
fields = ["name", "customer_name", "customer_group", "territory"]
|
fields = ["name", "customer_name", "customer_group", "territory"]
|
||||||
|
|
||||||
fields = ", ".join(fields)
|
fields = ", ".join(fields)
|
||||||
|
|
||||||
return webnotes.conn.sql("""select %(field)s from `tabCustomer` where docstatus < 2 and
|
return webnotes.conn.sql("""select %(field)s from `tabCustomer` where docstatus < 2 and
|
||||||
@ -142,6 +151,7 @@ def account_query(doctype, txt, searchfield, start, page_len, filters):
|
|||||||
|
|
||||||
def item_query(doctype, txt, searchfield, start, page_len, filters):
|
def item_query(doctype, txt, searchfield, start, page_len, filters):
|
||||||
conditions = []
|
conditions = []
|
||||||
|
|
||||||
return webnotes.conn.sql("""select tabItem.name,
|
return webnotes.conn.sql("""select tabItem.name,
|
||||||
if(length(tabItem.item_name) > 40,
|
if(length(tabItem.item_name) > 40,
|
||||||
concat(substr(tabItem.item_name, 1, 40), "..."), item_name) as item_name,
|
concat(substr(tabItem.item_name, 1, 40), "..."), item_name) as item_name,
|
||||||
@ -158,6 +168,7 @@ def item_query(doctype, txt, searchfield, start, page_len, filters):
|
|||||||
|
|
||||||
def bom(doctype, txt, searchfield, start, page_len, filters):
|
def bom(doctype, txt, searchfield, start, page_len, filters):
|
||||||
conditions = []
|
conditions = []
|
||||||
|
|
||||||
return webnotes.conn.sql("""select tabBOM.name, tabBOM.item
|
return webnotes.conn.sql("""select tabBOM.name, tabBOM.item
|
||||||
from tabBOM
|
from tabBOM
|
||||||
where tabBOM.docstatus=1 and tabBOM.is_active=1
|
where tabBOM.docstatus=1 and tabBOM.is_active=1
|
||||||
@ -166,10 +177,6 @@ def bom(doctype, txt, searchfield, start, page_len, filters):
|
|||||||
'fcond': get_filters_cond(doctype, filters, conditions), 'mcond':get_match_cond(doctype, searchfield),
|
'fcond': get_filters_cond(doctype, filters, conditions), 'mcond':get_match_cond(doctype, searchfield),
|
||||||
'start': start, 'page_len': page_len})
|
'start': start, 'page_len': page_len})
|
||||||
|
|
||||||
# erpnext.queries.task = function() {
|
|
||||||
# return { query: "projects.utils.query_task" };
|
|
||||||
# };
|
|
||||||
|
|
||||||
def get_project_name(doctype, txt, searchfield, start, page_len, filters):
|
def get_project_name(doctype, txt, searchfield, start, page_len, filters):
|
||||||
cond = ''
|
cond = ''
|
||||||
if filters['customer']:
|
if filters['customer']:
|
||||||
|
@ -20,10 +20,16 @@ cur_frm.cscript.refresh = function(doc) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
cur_frm.set_query("current_bom", function(doc) {
|
cur_frm.set_query("current_bom", function(doc) {
|
||||||
return erpnext.queries.bom({name: "!" + doc.new_bom});
|
return{
|
||||||
|
query:"controllers.queries.bom",
|
||||||
|
filters: {name: "!" + doc.new_bom}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
cur_frm.set_query("new_bom", function(doc) {
|
cur_frm.set_query("new_bom", function(doc) {
|
||||||
return erpnext.queries.bom({name: "!" + doc.current_bom});
|
return{
|
||||||
|
query:"controllers.queries.bom",
|
||||||
|
filters: {name: "!" + doc.current_bom}
|
||||||
|
}
|
||||||
});
|
});
|
@ -117,6 +117,9 @@ cur_frm.fields_dict['project_name'].get_query = function(doc, dt, dn) {
|
|||||||
|
|
||||||
cur_frm.set_query("bom_no", function(doc) {
|
cur_frm.set_query("bom_no", function(doc) {
|
||||||
if (doc.production_item) {
|
if (doc.production_item) {
|
||||||
return erpnext.queries.bom({item: cstr(doc.production_item)});
|
return{
|
||||||
|
query:"controllers.queries.bom",
|
||||||
|
filters: {item: cstr(doc.production_item)}
|
||||||
|
}
|
||||||
} else msgprint(" Please enter Production Item first");
|
} else msgprint(" Please enter Production Item first");
|
||||||
});
|
});
|
@ -2,8 +2,8 @@ wn.provide("erpnext.projects");
|
|||||||
|
|
||||||
erpnext.projects.TimeLog = wn.ui.form.Controller.extend({
|
erpnext.projects.TimeLog = wn.ui.form.Controller.extend({
|
||||||
setup: function() {
|
setup: function() {
|
||||||
this.frm.set_query("task", erpnext.queries.task);
|
this.frm.set_query("task", function() {
|
||||||
}
|
return { query: "projects.utils.query_task" }
|
||||||
});
|
});
|
||||||
|
|
||||||
cur_frm.cscript = new erpnext.projects.TimeLog({frm: cur_frm});
|
cur_frm.cscript = new erpnext.projects.TimeLog({frm: cur_frm});
|
@ -36,33 +36,34 @@ erpnext.selling.SellingController = erpnext.TransactionController.extend({
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.frm.set_query("customer_address", function() {
|
this.frm.set_query("customer_address", function() {
|
||||||
return 'SELECT name, address_line1, city FROM tabAddress \
|
return {
|
||||||
WHERE customer = "'+ me.frm.doc.customer +'" AND docstatus != 2 AND \
|
filters: {'customer': me.frm.doc.customer }
|
||||||
%(key)s LIKE "%s" ORDER BY name ASC LIMIT 50';
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
this.frm.set_query("contact_person", function() {
|
this.frm.set_query("contact_person", function() {
|
||||||
return 'SELECT name, CONCAT(first_name," ",ifnull(last_name,"")) As FullName, \
|
return {
|
||||||
department, designation FROM tabContact WHERE customer = "'+ me.frm.doc.customer +
|
filters: {'customer': me.frm.doc.customer }
|
||||||
'" AND docstatus != 2 AND %(key)s LIKE "%s" ORDER BY name ASC LIMIT 50';
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if(this.frm.fields_dict.charge) {
|
if(this.frm.fields_dict.charge) {
|
||||||
this.frm.set_query("charge", function() {
|
this.frm.set_query("charge", function() {
|
||||||
return 'SELECT DISTINCT `tabSales Taxes and Charges Master`.name FROM \
|
return {
|
||||||
`tabSales Taxes and Charges Master` \
|
filters: [
|
||||||
WHERE `tabSales Taxes and Charges Master`.company = "' + me.frm.doc.company +
|
['Sales Taxes and Charges Master', 'company', '=', me.frm.doc.company],
|
||||||
'" AND `tabSales Taxes and Charges Master`.company is not NULL \
|
['Sales Taxes and Charges Master', 'company', 'is not', 'NULL'],
|
||||||
AND `tabSales Taxes and Charges Master`.docstatus != 2 \
|
['Sales Taxes and Charges Master', 'docstatus', '!=', 2]
|
||||||
AND `tabSales Taxes and Charges Master`.%(key)s LIKE "%s" \
|
]
|
||||||
ORDER BY `tabSales Taxes and Charges Master`.name LIMIT 50';
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
this.frm.fields_dict.customer.get_query = function(doc,cdt,cdn) {
|
this.frm.fields_dict.customer.get_query = function(doc,cdt,cdn) {
|
||||||
return{ query:"controllers.queries.customer_query" } }
|
return{ query:"controllers.queries.customer_query" } }
|
||||||
|
|
||||||
this.frm.fields_dict.lead && this.frm.set_query("lead", erpnext.utils.lead_query);
|
this.frm.fields_dict.lead && this.frm.set_query("lead", function(doc,cdt,cdn) {
|
||||||
|
return{ query:"controllers.queries.lead_query" } });
|
||||||
|
|
||||||
if(!this.fname) {
|
if(!this.fname) {
|
||||||
return;
|
return;
|
||||||
@ -71,8 +72,10 @@ erpnext.selling.SellingController = erpnext.TransactionController.extend({
|
|||||||
if(this.frm.fields_dict[this.fname].grid.get_field('item_code')) {
|
if(this.frm.fields_dict[this.fname].grid.get_field('item_code')) {
|
||||||
this.frm.set_query("item_code", this.fname, function() {
|
this.frm.set_query("item_code", this.fname, function() {
|
||||||
return me.frm.doc.order_type === "Maintenance" ?
|
return me.frm.doc.order_type === "Maintenance" ?
|
||||||
erpnext.queries.item({'ifnull(tabItem.is_service_item, "No")': "Yes"}) :
|
{ query:"controllers.queries.item_query",
|
||||||
erpnext.queries.item({'ifnull(tabItem.is_sales_item, "No")': "Yes"});
|
filters:{'is_service_item': 'Yes'}} :
|
||||||
|
{ query:"controllers.queries.item_query",
|
||||||
|
filters:{'is_sales_item': 'Yes' }} ;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,18 +86,22 @@ erpnext.selling.SellingController = erpnext.TransactionController.extend({
|
|||||||
wn.throw("Please enter Item Code to get batch no");
|
wn.throw("Please enter Item Code to get batch no");
|
||||||
} else {
|
} else {
|
||||||
if(item.warehouse) {
|
if(item.warehouse) {
|
||||||
return "select batch_no from `tabStock Ledger Entry` sle \
|
return {
|
||||||
where item_code = '" + item.item_code +
|
query : "selling.doctype.sales_common.sales_common.get_batch_no",
|
||||||
"' and warehouse = '" + item.warehouse +
|
filters: {
|
||||||
"' and ifnull(is_cancelled, 'No') = 'No' and batch_no like '%s' \
|
'item_code': item.item_code,
|
||||||
and exists(select * from `tabBatch` where \
|
'warehouse': item.warehouse,
|
||||||
name = sle.batch_no and expiry_date >= '" + me.frm.doc.posting_date +
|
'posting_date': me.frm.doc.posting_date
|
||||||
"' and docstatus != 2) group by batch_no having sum(actual_qty) > 0 \
|
}
|
||||||
order by batch_no desc limit 50";
|
}
|
||||||
} else {
|
} else {
|
||||||
return "SELECT name FROM tabBatch WHERE docstatus != 2 AND item = '" +
|
return{
|
||||||
item.item_code + "' and expiry_date >= '" + me.frm.doc.posting_date +
|
query : "selling.doctype.sales_common.sales_common.get_batch_no",
|
||||||
"' AND name like '%s' ORDER BY name DESC LIMIT 50";
|
filters: {
|
||||||
|
'item': item.item_code,
|
||||||
|
'posting_date': me.frm.doc.posting_date
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -365,3 +365,25 @@ class DocType(TransactionBase):
|
|||||||
dt = webnotes.conn.sql("select transaction_date from `tab%s` where name = '%s'" % (d.prevdoc_doctype, d.prevdoc_docname))
|
dt = webnotes.conn.sql("select transaction_date from `tab%s` where name = '%s'" % (d.prevdoc_doctype, d.prevdoc_docname))
|
||||||
d.prevdoc_date = (dt and dt[0][0]) and dt[0][0].strftime('%Y-%m-%d') or ''
|
d.prevdoc_date = (dt and dt[0][0]) and dt[0][0].strftime('%Y-%m-%d') or ''
|
||||||
|
|
||||||
|
def get_batch_no(doctype, txt, searchfield, start, page_len, filters):
|
||||||
|
from controllers.queries import get_match_cond
|
||||||
|
|
||||||
|
if filters.has_key('warehouse'):
|
||||||
|
return webnotes.conn.sql("""select batch_no from `tabStock Ledger Entry` sle
|
||||||
|
where item_code = '%(item_code)s' and warehouse = '%(warehouse)s'
|
||||||
|
and ifnull(is_cancelled, 'No') = 'No' and batch_no like '%(txt)s'
|
||||||
|
and exists(select * from `tabBatch` where
|
||||||
|
name = sle.batch_no and expiry_date >= '%(posting_date)s'
|
||||||
|
and docstatus != 2) %(mcond)s
|
||||||
|
group by batch_no having sum(actual_qty) > 0
|
||||||
|
order by batch_no desc limit %(start)s, %(page_len)s
|
||||||
|
""" % {'item_code': filters['item_code'], 'warehouse': filters['warehouse'],
|
||||||
|
'posting_date': filters['posting_date'], 'txt': 'txt': "%%%s%%" % txt,
|
||||||
|
'mcond':get_match_cond(doctype, searchfield),'start': start, 'page_len': page_len})
|
||||||
|
else:
|
||||||
|
return webnotes.conn.sql("""select name from tabBatch where docstatus != 2
|
||||||
|
and item = '%(item_code)s' and expiry_date >= '%(posting_date)s'
|
||||||
|
and name like '%(txt)s' %(mcond)s ORDER BY name DESC LIMIT 50""" %
|
||||||
|
{'item_code': filters['item_code'], 'posting_date': filters['posting_date'],
|
||||||
|
'txt': 'txt': "%%%s%%" % txt, 'mcond':get_match_cond(doctype, searchfield),
|
||||||
|
'start': start, 'page_len': page_len})
|
Loading…
x
Reference in New Issue
Block a user