Bläddra i källkod

Merge pull request #618 from anandpdoshi/anand-wip

Fixed Data Import for Children, Query Reports trigger refresh
version-14
Rushabh Mehta 11 år sedan
förälder
incheckning
9b7cb3c46c
5 ändrade filer med 77 tillägg och 15 borttagningar
  1. +9
    -0
      frappe/core/doctype/user/user.py
  2. +4
    -3
      frappe/core/doctype/userrole/userrole.json
  3. +9
    -6
      frappe/core/page/data_import_tool/importer.py
  4. +29
    -6
      frappe/public/js/frappe/views/query_report.js
  5. +26
    -0
      frappe/tests/test_data_import.py

+ 9
- 0
frappe/core/doctype/user/user.py Visa fil

@@ -27,6 +27,7 @@ class User(Document):
self.add_system_manager_role() self.add_system_manager_role()
self.check_enable_disable() self.check_enable_disable()
self.update_gravatar() self.update_gravatar()
self.ensure_unique_roles()
self.remove_all_roles_for_guest() self.remove_all_roles_for_guest()
if self.language == "Loading...": if self.language == "Loading...":
self.language = None self.language = None
@@ -255,6 +256,14 @@ class User(Document):
if self.name == "Guest": if self.name == "Guest":
self.set("user_roles", list(set(d for d in self.get("user_roles") if d.role == "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() @frappe.whitelist()
def get_languages(): def get_languages():
from frappe.translate import get_lang_dict from frappe.translate import get_lang_dict


+ 4
- 3
frappe/core/doctype/userrole/userrole.json Visa fil

@@ -1,7 +1,7 @@
{ {
"allow_copy": 0, "allow_copy": 0,
"autoname": "UR.#####", "autoname": "UR.#####",
"creation": "2013-02-06 11:30:13.000000",
"creation": "2013-02-06 11:30:13",
"docstatus": 0, "docstatus": 0,
"doctype": "DocType", "doctype": "DocType",
"fields": [ "fields": [
@@ -16,7 +16,7 @@
"options": "Role", "options": "Role",
"permlevel": 0, "permlevel": 0,
"print_width": "200px", "print_width": "200px",
"reqd": 0,
"reqd": 1,
"search_index": 0, "search_index": 0,
"width": "200px" "width": "200px"
} }
@@ -26,10 +26,11 @@
"idx": 1, "idx": 1,
"issingle": 0, "issingle": 0,
"istable": 1, "istable": 1,
"modified": "2013-12-20 19:21:54.000000",
"modified": "2014-06-17 06:56:28.816283",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Core", "module": "Core",
"name": "UserRole", "name": "UserRole",
"owner": "Administrator", "owner": "Administrator",
"permissions": [],
"read_only": 0 "read_only": 0
} }

+ 9
- 6
frappe/core/page/data_import_tool/importer.py Visa fil

@@ -172,8 +172,12 @@ def upload(rows = None, submit_after_import=None, ignore_encoding_errors=False,
overwrite = params.get('overwrite') overwrite = params.get('overwrite')


# delete child rows (if parenttype) # 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 = [] ret = []
error = False error = False
@@ -188,13 +192,12 @@ def upload(rows = None, submit_after_import=None, ignore_encoding_errors=False,
doc = get_doc(row_idx) doc = get_doc(row_idx)
try: try:
frappe.local.message_log = [] 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() parent.save()
ret.append('Inserted row for %s at #%s' % (getlink(parenttype, ret.append('Inserted row for %s at #%s' % (getlink(parenttype,
doc.parent), unicode(doc.idx))) doc.parent), unicode(doc.idx)))

else: else:
if overwrite and frappe.db.exists(doctype, doc["name"]): if overwrite and frappe.db.exists(doctype, doc["name"]):
original = frappe.get_doc(doctype, doc["name"]) original = frappe.get_doc(doctype, doc["name"])


+ 29
- 6
frappe/public/js/frappe/views/query_report.js Visa fil

@@ -142,8 +142,18 @@ frappe.views.QueryReport = Class.extend({
} }


if(df.get_query) f.get_query = df.get_query; 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_route_filters()
this.set_filters_by_name(); 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), this.waiting = frappe.messages.waiting(this.wrapper.find(".waiting-area").empty().toggle(true),
"Loading Report..."); "Loading Report...");
this.wrapper.find(".results").toggle(false); 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({ return frappe.call({
method: "frappe.widgets.query_report.run", method: "frappe.widgets.query_report.run",
type: "GET", type: "GET",
@@ -194,7 +201,23 @@ frappe.views.QueryReport = Class.extend({


return this.report_ajax; 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 filters = {};
var mandatory_fields = []; var mandatory_fields = [];
$.each(this.filters || [], function(i, f) { $.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(f.df.reqd && !v) mandatory_fields.push(f.df.label);
if(v) filters[f.df.fieldname] = v; 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"))); frappe.throw(__("Mandatory filters required:\n") + __(mandatory_fields.join("\n")));
} }
return filters return filters


+ 26
- 0
frappe/tests/test_data_import.py Visa fil

@@ -46,6 +46,32 @@ class TestDataImport(unittest.TestCase):
importer.upload(content, overwrite=True) importer.upload(content, overwrite=True)
self.assertTrue(frappe.db.get_value("Blog Category", "test-category", "title"), "New Title") 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): def test_import_with_children(self):
exporter.get_template("Event", all_doctypes="Yes", with_data="No") exporter.get_template("Event", all_doctypes="Yes", with_data="No")
content = read_csv_content(frappe.response.result) content = read_csv_content(frappe.response.result)


Laddar…
Avbryt
Spara