Fixed Data Import for Children, Query Reports trigger refreshversion-14
@@ -27,6 +27,7 @@ class User(Document): | |||
self.add_system_manager_role() | |||
self.check_enable_disable() | |||
self.update_gravatar() | |||
self.ensure_unique_roles() | |||
self.remove_all_roles_for_guest() | |||
if self.language == "Loading...": | |||
self.language = None | |||
@@ -255,6 +256,14 @@ class User(Document): | |||
if self.name == "Guest": | |||
self.set("user_roles", list(set(d for d in self.get("user_roles") if d.role == "Guest"))) | |||
def ensure_unique_roles(self): | |||
exists = [] | |||
for i, d in enumerate(self.get("user_roles")): | |||
if (not d.role) or (d.role in exists): | |||
self.get("user_roles").remove(d) | |||
else: | |||
exists.append(d.role) | |||
@frappe.whitelist() | |||
def get_languages(): | |||
from frappe.translate import get_lang_dict | |||
@@ -1,7 +1,7 @@ | |||
{ | |||
"allow_copy": 0, | |||
"autoname": "UR.#####", | |||
"creation": "2013-02-06 11:30:13.000000", | |||
"creation": "2013-02-06 11:30:13", | |||
"docstatus": 0, | |||
"doctype": "DocType", | |||
"fields": [ | |||
@@ -16,7 +16,7 @@ | |||
"options": "Role", | |||
"permlevel": 0, | |||
"print_width": "200px", | |||
"reqd": 0, | |||
"reqd": 1, | |||
"search_index": 0, | |||
"width": "200px" | |||
} | |||
@@ -26,10 +26,11 @@ | |||
"idx": 1, | |||
"issingle": 0, | |||
"istable": 1, | |||
"modified": "2013-12-20 19:21:54.000000", | |||
"modified": "2014-06-17 06:56:28.816283", | |||
"modified_by": "Administrator", | |||
"module": "Core", | |||
"name": "UserRole", | |||
"owner": "Administrator", | |||
"permissions": [], | |||
"read_only": 0 | |||
} |
@@ -172,8 +172,12 @@ def upload(rows = None, submit_after_import=None, ignore_encoding_errors=False, | |||
overwrite = params.get('overwrite') | |||
# delete child rows (if parenttype) | |||
if parenttype and overwrite: | |||
delete_child_rows(data, doctype) | |||
parentfield = None | |||
if parenttype: | |||
parentfield = get_parent_field(doctype, parenttype) | |||
if overwrite: | |||
delete_child_rows(data, doctype) | |||
ret = [] | |||
error = False | |||
@@ -188,13 +192,12 @@ def upload(rows = None, submit_after_import=None, ignore_encoding_errors=False, | |||
doc = get_doc(row_idx) | |||
try: | |||
frappe.local.message_log = [] | |||
if doc.get("parentfield"): | |||
parent = frappe.get_doc(doc["parenttype"], doc["parentfield"]) | |||
parent.append(doc) | |||
if parentfield: | |||
parent = frappe.get_doc(parenttype, doc["parent"]) | |||
doc = parent.append(parentfield, doc) | |||
parent.save() | |||
ret.append('Inserted row for %s at #%s' % (getlink(parenttype, | |||
doc.parent), unicode(doc.idx))) | |||
else: | |||
if overwrite and frappe.db.exists(doctype, doc["name"]): | |||
original = frappe.get_doc(doctype, doc["name"]) | |||
@@ -142,8 +142,18 @@ frappe.views.QueryReport = Class.extend({ | |||
} | |||
if(df.get_query) f.get_query = df.get_query; | |||
// run report on change | |||
f.$input.on("change", function() { | |||
me.trigger_refresh(); | |||
}); | |||
} | |||
}); | |||
// hide appframe form if no filters | |||
var $filters = this.appframe.parent.find('.appframe-form .filters'); | |||
this.appframe.parent.find('.appframe-form').toggle($filters.length ? true : false); | |||
this.set_route_filters() | |||
this.set_filters_by_name(); | |||
}, | |||
@@ -175,10 +185,7 @@ frappe.views.QueryReport = Class.extend({ | |||
this.waiting = frappe.messages.waiting(this.wrapper.find(".waiting-area").empty().toggle(true), | |||
"Loading Report..."); | |||
this.wrapper.find(".results").toggle(false); | |||
var filters = {}; | |||
$.each(this.filters || [], function(i, f) { | |||
filters[f.df.fieldname] = f.get_parsed_value(); | |||
}) | |||
var filters = this.get_values(true); | |||
return frappe.call({ | |||
method: "frappe.widgets.query_report.run", | |||
type: "GET", | |||
@@ -194,7 +201,23 @@ frappe.views.QueryReport = Class.extend({ | |||
return this.report_ajax; | |||
}, | |||
get_values: function() { | |||
trigger_refresh: function() { | |||
var me = this; | |||
var filters = me.get_values(); | |||
// check if required filters are not missing | |||
var missing = false; | |||
$.each(me.filters, function(k, _f) { | |||
if (_f.df.reqd && !filters[_f.df.fieldname]) { | |||
missing = true; | |||
return; | |||
} | |||
}); | |||
if (!missing) { | |||
me.refresh(); | |||
} | |||
}, | |||
get_values: function(raise) { | |||
var filters = {}; | |||
var mandatory_fields = []; | |||
$.each(this.filters || [], function(i, f) { | |||
@@ -203,7 +226,7 @@ frappe.views.QueryReport = Class.extend({ | |||
if(f.df.reqd && !v) mandatory_fields.push(f.df.label); | |||
if(v) filters[f.df.fieldname] = v; | |||
}) | |||
if(mandatory_fields.length) { | |||
if(raise && mandatory_fields.length) { | |||
frappe.throw(__("Mandatory filters required:\n") + __(mandatory_fields.join("\n"))); | |||
} | |||
return filters | |||
@@ -46,6 +46,32 @@ class TestDataImport(unittest.TestCase): | |||
importer.upload(content, overwrite=True) | |||
self.assertTrue(frappe.db.get_value("Blog Category", "test-category", "title"), "New Title") | |||
def test_import_only_children(self): | |||
user_email = "test_import_userrole@example.com" | |||
if frappe.db.exists("User", user_email): | |||
frappe.delete_doc("User", user_email) | |||
frappe.get_doc({"doctype": "User", "email": user_email, "first_name": "Test Import UserRole"}).insert() | |||
exporter.get_template("UserRole", "User", all_doctypes="No", with_data="No") | |||
content = read_csv_content(frappe.response.result) | |||
content.append(["", "test_import_userrole@example.com", "Blogger"]) | |||
importer.upload(content) | |||
user = frappe.get_doc("User", user_email) | |||
self.assertEquals(len(user.get("user_roles")), 1) | |||
self.assertTrue(user.get("user_roles")[0].role, "Blogger") | |||
# overwrite | |||
exporter.get_template("UserRole", "User", all_doctypes="No", with_data="No") | |||
content = read_csv_content(frappe.response.result) | |||
content.append(["", "test_import_userrole@example.com", "Website Manager"]) | |||
importer.upload(content, overwrite=True) | |||
user = frappe.get_doc("User", user_email) | |||
self.assertEquals(len(user.get("user_roles")), 1) | |||
self.assertTrue(user.get("user_roles")[0].role, "Website Manager") | |||
def test_import_with_children(self): | |||
exporter.get_template("Event", all_doctypes="Yes", with_data="No") | |||
content = read_csv_content(frappe.response.result) | |||