Merge pull request #17970 from Mangesh-Khairnar/employee-benefit-application
fix(employee-benefit-application): remove query from setup
diff --git a/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.js b/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.js
index 2a44cb3..0acbe20 100644
--- a/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.js
+++ b/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.js
@@ -43,8 +43,13 @@
reference_docname: function(frm) {
if (frm.doc.reference_docname && frm.doc.reference_doctype) {
- let fields_to_fetch = ["project", "grand_total"];
+ let fields_to_fetch = ["grand_total"];
let party_field = frm.doc.reference_doctype == "Sales Order" ? "customer" : "supplier";
+
+ if (frm.doc.reference_doctype == "Sales Order") {
+ fields_to_fetch.push("project");
+ }
+
fields_to_fetch.push(party_field);
frappe.call({
method: "erpnext.accounts.doctype.bank_guarantee.bank_guarantee.get_vouchar_detials",
diff --git a/erpnext/accounts/report/financial_statements.py b/erpnext/accounts/report/financial_statements.py
index 41205ae..c06856a 100644
--- a/erpnext/accounts/report/financial_statements.py
+++ b/erpnext/accounts/report/financial_statements.py
@@ -390,8 +390,8 @@
if filters:
if filters.get("project"):
if not isinstance(filters.get("project"), list):
- projects = frappe.safe_encode(filters.get("project"))
- filters.project = [d.strip() for d in projects.strip().split(',') if d]
+ filters.project = frappe.parse_json(filters.get("project"))
+
additional_conditions.append("project in %(project)s")
if filters.get("cost_center"):
diff --git a/erpnext/accounts/report/general_ledger/general_ledger.js b/erpnext/accounts/report/general_ledger/general_ledger.js
index 4235b7f..5c98b24 100644
--- a/erpnext/accounts/report/general_ledger/general_ledger.js
+++ b/erpnext/accounts/report/general_ledger/general_ledger.js
@@ -72,46 +72,25 @@
{
"fieldname":"party",
"label": __("Party"),
- "fieldtype": "MultiSelect",
- get_data: function() {
+ "fieldtype": "MultiSelectList",
+ get_data: function(txt) {
if (!frappe.query_report.filters) return;
- var party_type = frappe.query_report.get_filter_value('party_type');
- var parties = frappe.query_report.get_filter_value('party');
- if(!party_type) return;
- const values = parties.split(/\s*,\s*/).filter(d => d);
- const txt = parties.match(/[^,\s*]*$/)[0] || '';
- let data = [];
+ let party_type = frappe.query_report.get_filter_value('party_type');
+ if (!party_type) return;
- frappe.call({
- type: "GET",
- method:'frappe.desk.search.search_link',
- async: false,
- no_spinner: true,
- args: {
- doctype: frappe.query_report.get_filter_value('party_type'),
- txt: txt,
- filters: {
- "name": ["not in", values]
- }
- },
- callback: function(r) {
- data = r.results;
- }
- });
- return data;
+ return frappe.db.get_link_options(party_type, txt);
},
on_change: function() {
var party_type = frappe.query_report.get_filter_value('party_type');
var parties = frappe.query_report.get_filter_value('party');
- const values = parties.split(/\s*,\s*/).filter(d => d);
- if(!party_type || !parties || values.length>1) {
+ if(!party_type || parties.length === 0 || parties.length > 1) {
frappe.query_report.set_filter_value('party_name', "");
frappe.query_report.set_filter_value('tax_id', "");
return;
} else {
- var party = values[0];
+ var party = parties[0];
var fieldname = erpnext.utils.get_party_name(party_type) || "name";
frappe.db.get_value(party_type, party, fieldname, function(value) {
frappe.query_report.set_filter_value('party_name', value[fieldname]);
@@ -154,62 +133,17 @@
{
"fieldname":"cost_center",
"label": __("Cost Center"),
- "fieldtype": "MultiSelect",
- get_data: function() {
- var cost_centers = frappe.query_report.get_filter_value("cost_center") || "";
-
- const values = cost_centers.split(/\s*,\s*/).filter(d => d);
- const txt = cost_centers.match(/[^,\s*]*$/)[0] || '';
- let data = [];
-
- frappe.call({
- type: "GET",
- method:'frappe.desk.search.search_link',
- async: false,
- no_spinner: true,
- args: {
- doctype: "Cost Center",
- txt: txt,
- filters: {
- "company": frappe.query_report.get_filter_value("company"),
- "name": ["not in", values]
- }
- },
- callback: function(r) {
- data = r.results;
- }
- });
- return data;
+ "fieldtype": "MultiSelectList",
+ get_data: function(txt) {
+ return frappe.db.get_link_options('Cost Center', txt);
}
},
{
"fieldname":"project",
"label": __("Project"),
- "fieldtype": "MultiSelect",
- get_data: function() {
- var projects = frappe.query_report.get_filter_value("project") || "";
-
- const values = projects.split(/\s*,\s*/).filter(d => d);
- const txt = projects.match(/[^,\s*]*$/)[0] || '';
- let data = [];
-
- frappe.call({
- type: "GET",
- method:'frappe.desk.search.search_link',
- async: false,
- no_spinner: true,
- args: {
- doctype: "Project",
- txt: txt,
- filters: {
- "name": ["not in", values]
- }
- },
- callback: function(r) {
- data = r.results;
- }
- });
- return data;
+ "fieldtype": "MultiSelectList",
+ get_data: function(txt) {
+ return frappe.db.get_link_options('Project', txt);
}
},
{
diff --git a/erpnext/accounts/report/general_ledger/general_ledger.py b/erpnext/accounts/report/general_ledger/general_ledger.py
index d9f395b..1c5e089 100644
--- a/erpnext/accounts/report/general_ledger/general_ledger.py
+++ b/erpnext/accounts/report/general_ledger/general_ledger.py
@@ -26,8 +26,7 @@
account_details.setdefault(acc.name, acc)
if filters.get('party'):
- parties = cstr(filters.get("party")).strip()
- filters.party = [d.strip() for d in parties.split(',') if d]
+ filters.party = frappe.parse_json(filters.get("party"))
validate_filters(filters, account_details)
@@ -61,12 +60,10 @@
frappe.throw(_("From Date must be before To Date"))
if filters.get('project'):
- projects = cstr(filters.get("project")).strip()
- filters.project = [d.strip() for d in projects.split(',') if d]
+ filters.project = frappe.parse_json(filters.get('project'))
if filters.get('cost_center'):
- cost_centers = cstr(filters.get("cost_center")).strip()
- filters.cost_center = [d.strip() for d in cost_centers.split(',') if d]
+ filters.cost_center = frappe.parse_json(filters.get('cost_center'))
def validate_party(filters):
diff --git a/erpnext/accounts/report/gross_and_net_profit_report/gross_and_net_profit_report.js b/erpnext/accounts/report/gross_and_net_profit_report/gross_and_net_profit_report.js
index 63ac281..8dc5ab3 100644
--- a/erpnext/accounts/report/gross_and_net_profit_report/gross_and_net_profit_report.js
+++ b/erpnext/accounts/report/gross_and_net_profit_report/gross_and_net_profit_report.js
@@ -13,33 +13,11 @@
frappe.query_reports["Gross and Net Profit Report"]["filters"].push(
{
- "fieldname":"project",
+ "fieldname": "project",
"label": __("Project"),
- "fieldtype": "MultiSelect",
- get_data: function() {
- var projects = frappe.query_report.get_filter_value("project") || "";
-
- const values = projects.split(/\s*,\s*/).filter(d => d);
- const txt = projects.match(/[^,\s*]*$/)[0] || '';
- let data = [];
-
- frappe.call({
- type: "GET",
- method:'frappe.desk.search.search_link',
- async: false,
- no_spinner: true,
- args: {
- doctype: "Project",
- txt: txt,
- filters: {
- "name": ["not in", values]
- }
- },
- callback: function(r) {
- data = r.results;
- }
- });
- return data;
+ "fieldtype": "MultiSelectList",
+ get_data: function(txt) {
+ return frappe.db.get_link_options('Project', txt);
}
},
{
diff --git a/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.js b/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.js
index 250e516..df5c982 100644
--- a/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.js
+++ b/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.js
@@ -8,33 +8,11 @@
frappe.query_reports["Profit and Loss Statement"]["filters"].push(
{
- "fieldname":"project",
+ "fieldname": "project",
"label": __("Project"),
- "fieldtype": "MultiSelect",
- get_data: function() {
- var projects = frappe.query_report.get_filter_value("project") || "";
-
- const values = projects.split(/\s*,\s*/).filter(d => d);
- const txt = projects.match(/[^,\s*]*$/)[0] || '';
- let data = [];
-
- frappe.call({
- type: "GET",
- method:'frappe.desk.search.search_link',
- async: false,
- no_spinner: true,
- args: {
- doctype: "Project",
- txt: txt,
- filters: {
- "name": ["not in", values]
- }
- },
- callback: function(r) {
- data = r.results;
- }
- });
- return data;
+ "fieldtype": "MultiSelectList",
+ get_data: function(txt) {
+ return frappe.db.get_link_options('Project', txt);
}
},
{
diff --git a/erpnext/public/js/controllers/buying.js b/erpnext/public/js/controllers/buying.js
index 7e61f03..97c823d 100644
--- a/erpnext/public/js/controllers/buying.js
+++ b/erpnext/public/js/controllers/buying.js
@@ -144,7 +144,9 @@
item.discount_amount = flt(item_rate) * flt(item.discount_percentage) / 100;
}
- item.rate = flt((item.price_list_rate) - (item.discount_amount), precision('rate', item));
+ if (item.discount_amount) {
+ item.rate = flt((item.price_list_rate) - (item.discount_amount), precision('rate', item));
+ }
this.calculate_taxes_and_totals();
},
diff --git a/erpnext/public/js/financial_statements.js b/erpnext/public/js/financial_statements.js
index 73e04c0..d1113a4 100644
--- a/erpnext/public/js/financial_statements.js
+++ b/erpnext/public/js/financial_statements.js
@@ -118,34 +118,13 @@
"options": erpnext.get_presentation_currency_list()
},
{
- "fieldname":"cost_center",
+ "fieldname": "cost_center",
"label": __("Cost Center"),
- "fieldtype": "MultiSelect",
- get_data: function() {
- var cost_centers = frappe.query_report.get_filter_value("cost_center") || "";
-
- const values = cost_centers.split(/\s*,\s*/).filter(d => d);
- const txt = cost_centers.match(/[^,\s*]*$/)[0] || '';
- let data = [];
-
- frappe.call({
- type: "GET",
- method:'frappe.desk.search.search_link',
- async: false,
- no_spinner: true,
- args: {
- doctype: "Cost Center",
- txt: txt,
- filters: {
- "company": frappe.query_report.get_filter_value("company"),
- "name": ["not in", values]
- }
- },
- callback: function(r) {
- data = r.results;
- }
+ "fieldtype": "MultiSelectList",
+ get_data: function(txt) {
+ return frappe.db.get_link_options('Cost Center', txt, {
+ company: frappe.query_report.get_filter_value("company")
});
- return data;
}
}
]
diff --git a/erpnext/public/js/utils/dimension_tree_filter.js b/erpnext/public/js/utils/dimension_tree_filter.js
index 16c1d4d..fef4507 100644
--- a/erpnext/public/js/utils/dimension_tree_filter.js
+++ b/erpnext/public/js/utils/dimension_tree_filter.js
@@ -14,8 +14,12 @@
onload: function(frm) {
dimension_filters.then((dimensions) => {
dimensions.forEach((dimension) => {
- frm.set_query(dimension['fieldname'],{
- "is_group": 0
+ frappe.model.with_doctype(dimension['document_type'], () => {
+ if (frappe.meta.has_field(dimension['document_type'], 'is_group')) {
+ frm.set_query(dimension['fieldname'], {
+ "is_group": 0
+ });
+ }
});
});
});
diff --git a/erpnext/stock/doctype/delivery_trip/delivery_trip.py b/erpnext/stock/doctype/delivery_trip/delivery_trip.py
index 01b4734..bc8c749 100644
--- a/erpnext/stock/doctype/delivery_trip/delivery_trip.py
+++ b/erpnext/stock/doctype/delivery_trip/delivery_trip.py
@@ -20,8 +20,7 @@
# Google Maps returns distances in meters by default
self.default_distance_uom = frappe.db.get_single_value("Global Defaults", "default_distance_unit") or "Meter"
self.uom_conversion_factor = frappe.db.get_value("UOM Conversion Factor",
- {"from_uom": "Meter", "to_uom": self.default_distance_uom},
- "value")
+ {"from_uom": "Meter", "to_uom": self.default_distance_uom}, "value")
def validate(self):
self.validate_stop_addresses()
@@ -139,7 +138,7 @@
# Include last leg in the final distance calculation
self.uom = self.default_distance_uom
total_distance = sum([leg.get("distance", {}).get("value", 0.0)
- for leg in directions.get("legs")]) # in meters
+ for leg in directions.get("legs")]) # in meters
self.total_distance = total_distance * self.uom_conversion_factor
else:
idx += len(route) - 1
@@ -358,8 +357,12 @@
email_recipients = []
for stop in delivery_trip.delivery_stops:
- contact_info = frappe.db.get_value("Contact", stop.contact,
- ["first_name", "last_name", "email_id", "gender"], as_dict=1)
+ contact_info = frappe.db.get_value("Contact", stop.contact, ["first_name", "last_name", "email_id"], as_dict=1)
+
+ context.update({"items": []})
+ if stop.delivery_note:
+ items = frappe.get_all("Delivery Note Item", filters={"parent": stop.delivery_note, "docstatus": 1}, fields=["*"])
+ context.update({"items": items})
if contact_info and contact_info.email_id:
context.update(stop.as_dict())
@@ -369,9 +372,9 @@
dispatch_template = frappe.get_doc("Email Template", dispatch_template_name)
frappe.sendmail(recipients=contact_info.email_id,
- subject=dispatch_template.subject,
- message=frappe.render_template(dispatch_template.response, context),
- attachments=get_attachments(stop))
+ subject=dispatch_template.subject,
+ message=frappe.render_template(dispatch_template.response, context),
+ attachments=get_attachments(stop))
stop.db_set("email_sent_to", contact_info.email_id)
email_recipients.append(contact_info.email_id)
@@ -388,9 +391,7 @@
return []
dispatch_attachment = frappe.db.get_single_value("Delivery Settings", "dispatch_attachment")
- attachments = frappe.attach_print("Delivery Note",
- delivery_stop.delivery_note,
- file_name="Delivery Note",
- print_format=dispatch_attachment)
+ attachments = frappe.attach_print("Delivery Note", delivery_stop.delivery_note,
+ file_name="Delivery Note", print_format=dispatch_attachment)
return [attachments]