From a4d45cce6f0e4ed632ca1f0e64301e18c4f37dff Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 26 Dec 2014 13:17:06 +0530 Subject: [PATCH] Renamed table fieldnames --- frappe/cli.py | 2 +- .../customize_form/customize_form.json | 182 +++---- .../doctype/customize_form/customize_form.py | 12 +- .../customize_form/test_customize_form.py | 42 +- frappe/desk/doctype/event/event.json | 444 +++++++++--------- frappe/desk/doctype/event/event.py | 4 +- frappe/desk/doctype/event/test_records.json | 2 +- frappe/desk/form/meta.py | 2 +- .../doctype/email_alert/email_alert.json | 232 ++++----- .../email/doctype/email_alert/email_alert.py | 2 +- .../doctype/email_alert/test_records.json | 10 +- frappe/model/__init__.py | 7 +- .../doctype/print_format/print_format.json | 4 +- frappe/public/js/frappe/form/grid.js | 2 +- frappe/public/js/frappe/model/workflow.js | 10 +- frappe/tests/test_client_login.py | 2 +- frappe/tests/test_data_import.py | 2 +- frappe/tests/test_document.py | 4 +- frappe/utils/pdf.py | 1 + .../doctype/workflow/test_records.json | 6 + .../doctype/workflow/test_workflow.py | 10 + .../workflow/doctype/workflow/workflow.json | 18 +- frappe/workflow/doctype/workflow/workflow.py | 6 +- 23 files changed, 513 insertions(+), 493 deletions(-) create mode 100644 frappe/workflow/doctype/workflow/test_records.json create mode 100644 frappe/workflow/doctype/workflow/test_workflow.py diff --git a/frappe/cli.py b/frappe/cli.py index cf29f0bae4..d921697d6d 100755 --- a/frappe/cli.py +++ b/frappe/cli.py @@ -937,7 +937,7 @@ def get_site_status(verbose=False): # basic usage/progress analytics for doctype in ("Company", "Customer", "Item", "Quotation", "Sales Invoice", - "Journal Voucher", "Stock Ledger Entry"): + "Journal Entry", "Stock Ledger Entry"): key = doctype.lower().replace(" ", "_") + "_exists" ret[key] = 1 if frappe.db.count(doctype) else 0 diff --git a/frappe/custom/doctype/customize_form/customize_form.json b/frappe/custom/doctype/customize_form/customize_form.json index bf6cc52cb9..f8216ccd36 100644 --- a/frappe/custom/doctype/customize_form/customize_form.json +++ b/frappe/custom/doctype/customize_form/customize_form.json @@ -1,123 +1,123 @@ { - "autoname": "DL.####", - "creation": "2013-01-29 17:55:08", - "docstatus": 0, - "doctype": "DocType", + "autoname": "DL.####", + "creation": "2013-01-29 17:55:08", + "docstatus": 0, + "doctype": "DocType", "fields": [ { - "fieldname": "doc_type", - "fieldtype": "Link", - "hidden": 0, - "in_list_view": 1, - "label": "Enter Form Type", - "no_copy": 0, - "options": "DocType", - "permlevel": 0, + "fieldname": "doc_type", + "fieldtype": "Link", + "hidden": 0, + "in_list_view": 1, + "label": "Enter Form Type", + "no_copy": 0, + "options": "DocType", + "permlevel": 0, "search_index": 0 - }, + }, { - "fieldname": "properties", - "fieldtype": "Section Break", - "label": "Properties", + "fieldname": "properties", + "fieldtype": "Section Break", + "label": "Properties", "permlevel": 0 - }, + }, { - "fieldname": "column_break0", - "fieldtype": "Column Break", + "fieldname": "column_break0", + "fieldtype": "Column Break", "permlevel": 0 - }, + }, { - "fieldname": "default_print_format", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Default Print Format", - "no_copy": 0, - "options": "Print Format", - "permlevel": 0, + "fieldname": "default_print_format", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Default Print Format", + "no_copy": 0, + "options": "Print Format", + "permlevel": 0, "search_index": 0 - }, + }, { - "description": "Fields separated by comma (,) will be included in the
Search By list of Search dialog box", - "fieldname": "search_fields", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Search Fields", - "no_copy": 0, - "permlevel": 0, + "description": "Fields separated by comma (,) will be included in the
Search By list of Search dialog box", + "fieldname": "search_fields", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Search Fields", + "no_copy": 0, + "permlevel": 0, "search_index": 0 - }, + }, { - "fieldname": "sort_field", - "fieldtype": "Data", - "label": "Sort Field", + "fieldname": "sort_field", + "fieldtype": "Data", + "label": "Sort Field", "permlevel": 0 - }, + }, { - "fieldname": "sort_order", - "fieldtype": "Data", - "label": "Sort Order", + "fieldname": "sort_order", + "fieldtype": "Data", + "label": "Sort Order", "permlevel": 0 - }, + }, { - "fieldname": "column_break1", - "fieldtype": "Column Break", + "fieldname": "column_break1", + "fieldtype": "Column Break", "permlevel": 0 - }, + }, { - "fieldname": "allow_copy", - "fieldtype": "Check", - "label": "Hide Copy", - "no_copy": 0, - "permlevel": 0, + "fieldname": "allow_copy", + "fieldtype": "Check", + "label": "Hide Copy", + "no_copy": 0, + "permlevel": 0, "search_index": 0 - }, + }, { - "depends_on": "", - "fieldname": "max_attachments", - "fieldtype": "Int", - "label": "Max Attachments", - "no_copy": 0, - "permlevel": 0, + "depends_on": "", + "fieldname": "max_attachments", + "fieldtype": "Int", + "label": "Max Attachments", + "no_copy": 0, + "permlevel": 0, "search_index": 0 - }, + }, { - "description": "Customize Label, Print Hide, Default etc.", - "fieldname": "fields_section_break", - "fieldtype": "Section Break", - "label": "Fields", + "description": "Customize Label, Print Hide, Default etc.", + "fieldname": "fields_section_break", + "fieldtype": "Section Break", + "label": "Fields", "permlevel": 0 - }, + }, { - "fieldname": "customize_form_fields", - "fieldtype": "Table", - "label": "Fields", - "no_copy": 0, - "options": "Customize Form Field", - "permlevel": 0, + "fieldname": "fields", + "fieldtype": "Table", + "label": "Fields", + "no_copy": 0, + "options": "Customize Form Field", + "permlevel": 0, "search_index": 0 } - ], - "hide_toolbar": 1, - "icon": "icon-glass", - "idx": 1, - "issingle": 1, - "modified": "2014-08-22 05:42:45.083261", - "modified_by": "Administrator", - "module": "Custom", - "name": "Customize Form", - "owner": "Administrator", + ], + "hide_toolbar": 1, + "icon": "icon-glass", + "idx": 1, + "issingle": 1, + "modified": "2014-12-24 15:22:06.314218", + "modified_by": "Administrator", + "module": "Custom", + "name": "Customize Form", + "owner": "Administrator", "permissions": [ { - "create": 1, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 0, - "role": "System Manager", - "submit": 0, + "create": 1, + "email": 1, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "System Manager", + "submit": 0, "write": 1 } - ], + ], "search_fields": "doc_type" -} +} \ No newline at end of file diff --git a/frappe/custom/doctype/customize_form/customize_form.py b/frappe/custom/doctype/customize_form/customize_form.py index f7a12ea9d6..2084ed3bc1 100644 --- a/frappe/custom/doctype/customize_form/customize_form.py +++ b/frappe/custom/doctype/customize_form/customize_form.py @@ -68,7 +68,7 @@ class CustomizeForm(Document): new_d = {"fieldname": d.fieldname, "is_custom_field": d.get("is_custom_field"), "name": d.name} for property in self.docfield_properties: new_d[property] = d.get(property) - self.append("customize_form_fields", new_d) + self.append("fields", new_d) # NOTE doc is sent to clientside by run_method @@ -106,7 +106,7 @@ class CustomizeForm(Document): property_type=self.doctype_properties[property]) update_db = False - for df in self.get("customize_form_fields"): + for df in self.get("fields"): if df.get("__islocal"): continue @@ -137,7 +137,7 @@ class CustomizeForm(Document): updatedb(self.doc_type) def update_custom_fields(self): - for df in self.get("customize_form_fields"): + for df in self.get("fields"): if df.get("__islocal"): self.add_custom_field(df) else: @@ -176,7 +176,7 @@ class CustomizeForm(Document): def delete_custom_fields(self): meta = frappe.get_meta(self.doc_type) fields_to_remove = (set([df.fieldname for df in meta.get("fields")]) - - set(df.fieldname for df in self.get("customize_form_fields"))) + - set(df.fieldname for df in self.get("fields"))) for fieldname in fields_to_remove: df = meta.get("fields", {"fieldname": fieldname})[0] @@ -186,11 +186,11 @@ class CustomizeForm(Document): def set_idx_property_setter(self): meta = frappe.get_meta(self.doc_type) field_order_has_changed = [df.fieldname for df in meta.get("fields")] != \ - [d.fieldname for d in self.get("customize_form_fields")] + [d.fieldname for d in self.get("fields")] if field_order_has_changed: _idx = [] - for df in sorted(self.get("customize_form_fields"), key=lambda x: x.idx): + for df in sorted(self.get("fields"), key=lambda x: x.idx): _idx.append(df.fieldname) self.make_property_setter(property="_idx", value=json.dumps(_idx), property_type="Text") diff --git a/frappe/custom/doctype/customize_form/test_customize_form.py b/frappe/custom/doctype/customize_form/test_customize_form.py index db4115fb8b..1775d17506 100644 --- a/frappe/custom/doctype/customize_form/test_customize_form.py +++ b/frappe/custom/doctype/customize_form/test_customize_form.py @@ -39,28 +39,28 @@ class TestCustomizeForm(unittest.TestCase): def test_fetch_to_customize(self): d = self.get_customize_form() self.assertEquals(d.doc_type, None) - self.assertEquals(len(d.get("customize_form_fields")), 0) + self.assertEquals(len(d.get("fields")), 0) d = self.get_customize_form("Event") self.assertEquals(d.doc_type, "Event") - self.assertEquals(len(d.get("customize_form_fields")), 30) + self.assertEquals(len(d.get("fields")), 30) d = self.get_customize_form("User") self.assertEquals(d.doc_type, "User") - self.assertEquals(len(d.get("customize_form_fields")), 55) - self.assertEquals(d.get("customize_form_fields")[-1].fieldname, "test_custom_field") - self.assertEquals(d.get("customize_form_fields", {"fieldname": "location"})[0].in_list_view, 1) + self.assertEquals(len(d.get("fields")), 55) + self.assertEquals(d.get("fields")[-1].fieldname, "test_custom_field") + self.assertEquals(d.get("fields", {"fieldname": "location"})[0].in_list_view, 1) return d def test_save_customization_idx(self): d = self.get_customize_form("User") - original_sequence = [df.fieldname for df in d.get("customize_form_fields")] + original_sequence = [df.fieldname for df in d.get("fields")] # move field to last - location_field = d.get("customize_form_fields", {"fieldname": "location"})[0] - d.get("customize_form_fields").remove(location_field) - d.append("customize_form_fields", location_field) + location_field = d.get("fields", {"fieldname": "location"})[0] + d.get("fields").remove(location_field) + d.append("fields", location_field) d.run_method("save_customization") frappe.clear_cache(doctype=d.doc_type) @@ -98,13 +98,13 @@ class TestCustomizeForm(unittest.TestCase): self.assertEquals(frappe.db.get_value("Property Setter", {"doc_type": "User", "property": "reqd", "field_name": "location"}, "value"), None) - location_field = d.get("customize_form_fields", {"fieldname": "location"})[0] + location_field = d.get("fields", {"fieldname": "location"})[0] location_field.reqd = 1 d.run_method("save_customization") self.assertEquals(frappe.db.get_value("Property Setter", {"doc_type": "User", "property": "reqd", "field_name": "location"}, "value"), '1') - location_field = d.get("customize_form_fields", {"fieldname": "location"})[0] + location_field = d.get("fields", {"fieldname": "location"})[0] location_field.reqd = 0 d.run_method("save_customization") self.assertEquals(frappe.db.get_value("Property Setter", @@ -114,19 +114,19 @@ class TestCustomizeForm(unittest.TestCase): d = self.get_customize_form("User") self.assertEquals(frappe.db.get_value("Custom Field", "User-test_custom_field", "reqd"), 0) - custom_field = d.get("customize_form_fields", {"fieldname": "test_custom_field"})[0] + custom_field = d.get("fields", {"fieldname": "test_custom_field"})[0] custom_field.reqd = 1 d.run_method("save_customization") self.assertEquals(frappe.db.get_value("Custom Field", "User-test_custom_field", "reqd"), 1) - custom_field = d.get("customize_form_fields", {"is_custom_field": True})[0] + custom_field = d.get("fields", {"is_custom_field": True})[0] custom_field.reqd = 0 d.run_method("save_customization") self.assertEquals(frappe.db.get_value("Custom Field", "User-test_custom_field", "reqd"), 0) def test_save_customization_new_field(self): d = self.get_customize_form("User") - d.append("customize_form_fields", { + d.append("fields", { "label": "Test Add Custom Field Via Customize Form", "fieldtype": "Data", "__islocal": 1 @@ -141,8 +141,8 @@ class TestCustomizeForm(unittest.TestCase): def test_save_customization_remove_field(self): d = self.get_customize_form("User") - custom_field = d.get("customize_form_fields", {"fieldname": "test_custom_field"})[0] - d.get("customize_form_fields").remove(custom_field) + custom_field = d.get("fields", {"fieldname": "test_custom_field"})[0] + d.get("fields").remove(custom_field) d.run_method("save_customization") self.assertEquals(frappe.db.get_value("Custom Field", custom_field.name), None) @@ -155,21 +155,21 @@ class TestCustomizeForm(unittest.TestCase): d.doc_type = "User" d.run_method('reset_to_defaults') - self.assertEquals(d.get("customize_form_fields", {"fieldname": "location"})[0].in_list_view, None) + self.assertEquals(d.get("fields", {"fieldname": "location"})[0].in_list_view, None) frappe.local.test_objects["Property Setter"] = [] make_test_records_for_doctype("Property Setter") def test_set_allow_on_submit(self): d = self.get_customize_form("User") - d.get("customize_form_fields", {"fieldname": "first_name"})[0].allow_on_submit = 1 - d.get("customize_form_fields", {"fieldname": "test_custom_field"})[0].allow_on_submit = 1 + d.get("fields", {"fieldname": "first_name"})[0].allow_on_submit = 1 + d.get("fields", {"fieldname": "test_custom_field"})[0].allow_on_submit = 1 d.run_method("save_customization") d = self.get_customize_form("User") # don't allow for standard fields - self.assertEquals(d.get("customize_form_fields", {"fieldname": "first_name"})[0].allow_on_submit or 0, 0) + self.assertEquals(d.get("fields", {"fieldname": "first_name"})[0].allow_on_submit or 0, 0) # allow for custom field - self.assertEquals(d.get("customize_form_fields", {"fieldname": "test_custom_field"})[0].allow_on_submit, 1) + self.assertEquals(d.get("fields", {"fieldname": "test_custom_field"})[0].allow_on_submit, 1) diff --git a/frappe/desk/doctype/event/event.json b/frappe/desk/doctype/event/event.json index 6c013ab9a2..b9d80006ee 100644 --- a/frappe/desk/doctype/event/event.json +++ b/frappe/desk/doctype/event/event.json @@ -1,283 +1,283 @@ { - "autoname": "EV.#####", - "creation": "2013-06-10 13:17:47", - "docstatus": 0, - "doctype": "DocType", + "autoname": "EV.#####", + "creation": "2013-06-10 13:17:47", + "docstatus": 0, + "doctype": "DocType", "fields": [ { - "fieldname": "details", - "fieldtype": "Section Break", - "label": "Details", - "oldfieldtype": "Section Break", + "fieldname": "details", + "fieldtype": "Section Break", + "label": "Details", + "oldfieldtype": "Section Break", "permlevel": 0 - }, + }, { - "fieldname": "subject", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Subject", - "permlevel": 0, + "fieldname": "subject", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Subject", + "permlevel": 0, "reqd": 1 - }, - { - "fieldname": "event_type", - "fieldtype": "Select", - "in_list_view": 1, - "label": "Event Type", - "no_copy": 0, - "oldfieldname": "event_type", - "oldfieldtype": "Select", - "options": "Private\nPublic\nCancel", - "permlevel": 0, - "reqd": 1, + }, + { + "fieldname": "event_type", + "fieldtype": "Select", + "in_list_view": 1, + "label": "Event Type", + "no_copy": 0, + "oldfieldname": "event_type", + "oldfieldtype": "Select", + "options": "Private\nPublic\nCancel", + "permlevel": 0, + "reqd": 1, "search_index": 1 - }, + }, { - "default": "1", - "fieldname": "send_reminder", - "fieldtype": "Check", - "label": "Send an email reminder in the morning", + "default": "1", + "fieldname": "send_reminder", + "fieldtype": "Check", + "label": "Send an email reminder in the morning", "permlevel": 0 - }, + }, { - "fieldname": "column_break_4", - "fieldtype": "Column Break", + "fieldname": "column_break_4", + "fieldtype": "Column Break", "permlevel": 0 - }, + }, { - "fieldname": "all_day", - "fieldtype": "Check", - "label": "All Day", + "fieldname": "all_day", + "fieldtype": "Check", + "label": "All Day", "permlevel": 0 - }, + }, { - "fieldname": "starts_on", - "fieldtype": "Datetime", - "label": "Starts on", - "permlevel": 0, + "fieldname": "starts_on", + "fieldtype": "Datetime", + "label": "Starts on", + "permlevel": 0, "reqd": 1 - }, + }, { - "fieldname": "ends_on", - "fieldtype": "Datetime", - "label": "Ends on", - "permlevel": 0, + "fieldname": "ends_on", + "fieldtype": "Datetime", + "label": "Ends on", + "permlevel": 0, "reqd": 0 - }, + }, { - "fieldname": "section_break_8", - "fieldtype": "Section Break", + "fieldname": "section_break_8", + "fieldtype": "Section Break", "permlevel": 0 - }, + }, { - "fieldname": "repeat_this_event", - "fieldtype": "Check", - "label": "Repeat this Event", + "fieldname": "repeat_this_event", + "fieldtype": "Check", + "label": "Repeat this Event", "permlevel": 0 - }, + }, { - "depends_on": "repeat_this_event", - "fieldname": "section_break_11", - "fieldtype": "Section Break", + "depends_on": "repeat_this_event", + "fieldname": "section_break_11", + "fieldtype": "Section Break", "permlevel": 0 - }, + }, { - "depends_on": "repeat_this_event", - "fieldname": "repeat_on", - "fieldtype": "Select", - "label": "Repeat On", - "options": "\nEvery Day\nEvery Week\nEvery Month\nEvery Year", + "depends_on": "repeat_this_event", + "fieldname": "repeat_on", + "fieldtype": "Select", + "label": "Repeat On", + "options": "\nEvery Day\nEvery Week\nEvery Month\nEvery Year", "permlevel": 0 - }, + }, { - "depends_on": "repeat_this_event", - "description": "Leave blank to repeat always", - "fieldname": "repeat_till", - "fieldtype": "Date", - "label": "Repeat Till", + "depends_on": "repeat_this_event", + "description": "Leave blank to repeat always", + "fieldname": "repeat_till", + "fieldtype": "Date", + "label": "Repeat Till", "permlevel": 0 - }, + }, { - "fieldname": "column_break_11", - "fieldtype": "Column Break", + "fieldname": "column_break_11", + "fieldtype": "Column Break", "permlevel": 0 - }, + }, { - "depends_on": "eval:doc.repeat_this_event && doc.repeat_on===\"Every Day\"", - "fieldname": "monday", - "fieldtype": "Check", - "label": "Monday", + "depends_on": "eval:doc.repeat_this_event && doc.repeat_on===\"Every Day\"", + "fieldname": "monday", + "fieldtype": "Check", + "label": "Monday", "permlevel": 0 - }, + }, { - "depends_on": "eval:doc.repeat_this_event && doc.repeat_on===\"Every Day\"", - "fieldname": "tuesday", - "fieldtype": "Check", - "label": "Tuesday", + "depends_on": "eval:doc.repeat_this_event && doc.repeat_on===\"Every Day\"", + "fieldname": "tuesday", + "fieldtype": "Check", + "label": "Tuesday", "permlevel": 0 - }, + }, { - "depends_on": "eval:doc.repeat_this_event && doc.repeat_on===\"Every Day\"", - "fieldname": "wednesday", - "fieldtype": "Check", - "label": "Wednesday", + "depends_on": "eval:doc.repeat_this_event && doc.repeat_on===\"Every Day\"", + "fieldname": "wednesday", + "fieldtype": "Check", + "label": "Wednesday", "permlevel": 0 - }, + }, { - "depends_on": "eval:doc.repeat_this_event && doc.repeat_on===\"Every Day\"", - "fieldname": "thursday", - "fieldtype": "Check", - "label": "Thursday", + "depends_on": "eval:doc.repeat_this_event && doc.repeat_on===\"Every Day\"", + "fieldname": "thursday", + "fieldtype": "Check", + "label": "Thursday", "permlevel": 0 - }, + }, { - "depends_on": "eval:doc.repeat_this_event && doc.repeat_on===\"Every Day\"", - "fieldname": "friday", - "fieldtype": "Check", - "label": "Friday", + "depends_on": "eval:doc.repeat_this_event && doc.repeat_on===\"Every Day\"", + "fieldname": "friday", + "fieldtype": "Check", + "label": "Friday", "permlevel": 0 - }, + }, { - "depends_on": "eval:doc.repeat_this_event && doc.repeat_on===\"Every Day\"", - "fieldname": "saturday", - "fieldtype": "Check", - "label": "Saturday", + "depends_on": "eval:doc.repeat_this_event && doc.repeat_on===\"Every Day\"", + "fieldname": "saturday", + "fieldtype": "Check", + "label": "Saturday", "permlevel": 0 - }, + }, { - "depends_on": "eval:doc.repeat_this_event && doc.repeat_on===\"Every Day\"", - "fieldname": "sunday", - "fieldtype": "Check", - "label": "Sunday", + "depends_on": "eval:doc.repeat_this_event && doc.repeat_on===\"Every Day\"", + "fieldname": "sunday", + "fieldtype": "Check", + "label": "Sunday", "permlevel": 0 - }, + }, { - "fieldname": "section_break_6", - "fieldtype": "Section Break", + "fieldname": "section_break_6", + "fieldtype": "Section Break", "permlevel": 0 - }, - { - "fieldname": "description", - "fieldtype": "Text Editor", - "in_list_view": 0, - "label": "Description", - "no_copy": 0, - "oldfieldname": "description", - "oldfieldtype": "Text", - "permlevel": 0, - "print_width": "300px", - "search_index": 0, + }, + { + "fieldname": "description", + "fieldtype": "Text Editor", + "in_list_view": 0, + "label": "Description", + "no_copy": 0, + "oldfieldname": "description", + "oldfieldtype": "Text", + "permlevel": 0, + "print_width": "300px", + "search_index": 0, "width": "300px" - }, + }, { - "fieldname": "participants", - "fieldtype": "Section Break", - "label": "Participants", - "oldfieldtype": "Section Break", + "fieldname": "participants", + "fieldtype": "Section Break", + "label": "Participants", + "oldfieldtype": "Section Break", "permlevel": 0 - }, - { - "fieldname": "individuals", - "fieldtype": "Column Break", - "label": "Individuals", - "oldfieldtype": "Column Break", - "permlevel": 0, - "print_width": "50%", + }, + { + "fieldname": "individuals", + "fieldtype": "Column Break", + "label": "Individuals", + "oldfieldtype": "Column Break", + "permlevel": 0, + "print_width": "50%", "width": "50%" - }, - { - "fieldname": "event_individuals", - "fieldtype": "Table", - "label": "Event Individuals", - "no_copy": 0, - "oldfieldname": "event_individuals", - "oldfieldtype": "Table", - "options": "Event User", - "permlevel": 0, + }, + { + "fieldname": "users", + "fieldtype": "Table", + "label": "Users", + "no_copy": 0, + "oldfieldname": "event_individuals", + "oldfieldtype": "Table", + "options": "Event User", + "permlevel": 0, "search_index": 0 - }, - { - "fieldname": "groups", - "fieldtype": "Column Break", - "label": "Groups", - "oldfieldtype": "Column Break", - "permlevel": 0, - "print_width": "50%", + }, + { + "fieldname": "groups", + "fieldtype": "Column Break", + "label": "Groups", + "oldfieldtype": "Column Break", + "permlevel": 0, + "print_width": "50%", "width": "50%" - }, - { - "fieldname": "event_roles", - "fieldtype": "Table", - "label": "Event Roles", - "no_copy": 0, - "oldfieldname": "event_roles", - "oldfieldtype": "Table", - "options": "Event Role", - "permlevel": 0, + }, + { + "fieldname": "roles", + "fieldtype": "Table", + "label": "Roles", + "no_copy": 0, + "oldfieldname": "event_roles", + "oldfieldtype": "Table", + "options": "Event Role", + "permlevel": 0, "search_index": 0 - }, - { - "fieldname": "ref_type", - "fieldtype": "Link", - "hidden": 0, - "label": "Ref Type", - "no_copy": 0, - "oldfieldname": "ref_type", - "oldfieldtype": "Data", - "options": "DocType", - "permlevel": 0, - "read_only": 0, + }, + { + "fieldname": "ref_type", + "fieldtype": "Link", + "hidden": 0, + "label": "Ref Type", + "no_copy": 0, + "oldfieldname": "ref_type", + "oldfieldtype": "Data", + "options": "DocType", + "permlevel": 0, + "read_only": 0, "search_index": 0 - }, - { - "fieldname": "ref_name", - "fieldtype": "Dynamic Link", - "hidden": 0, - "label": "Ref Name", - "no_copy": 0, - "oldfieldname": "ref_name", - "oldfieldtype": "Data", - "options": "ref_type", - "permlevel": 0, - "read_only": 1, + }, + { + "fieldname": "ref_name", + "fieldtype": "Dynamic Link", + "hidden": 0, + "label": "Ref Name", + "no_copy": 0, + "oldfieldname": "ref_name", + "oldfieldtype": "Data", + "options": "ref_type", + "permlevel": 0, + "read_only": 1, "search_index": 0 } - ], - "icon": "icon-calendar", - "idx": 1, - "in_create": 1, - "modified": "2014-06-20 06:40:05.415415", - "modified_by": "Administrator", - "module": "Desk", - "name": "Event", - "owner": "Administrator", + ], + "icon": "icon-calendar", + "idx": 1, + "in_create": 1, + "modified": "2014-12-24 15:30:22.606715", + "modified_by": "Administrator", + "module": "Desk", + "name": "Event", + "owner": "Administrator", "permissions": [ { - "apply_user_permissions": 1, - "create": 1, - "delete": 0, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "All", - "submit": 0, + "apply_user_permissions": 1, + "create": 1, + "delete": 0, + "email": 1, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "All", + "submit": 0, "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "submit": 0, + }, + { + "create": 1, + "delete": 1, + "email": 1, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "submit": 0, "write": 1 } - ], - "read_only": 1, + ], + "read_only": 1, "title_field": "subject" -} +} \ No newline at end of file diff --git a/frappe/desk/doctype/event/event.py b/frappe/desk/doctype/event/event.py index 6546e5364d..a50364109c 100644 --- a/frappe/desk/doctype/event/event.py +++ b/frappe/desk/doctype/event/event.py @@ -35,10 +35,10 @@ def has_permission(doc, user): if doc.event_type=="Public" or doc.owner==user: return True - if doc.get("event_individuals", {"person": user}): + if doc.get("users", {"person": user}): return True - if doc.get("event_roles", {"role":("in", frappe.get_roles(user))}): + if doc.get("roles", {"role":("in", frappe.get_roles(user))}): return True return False diff --git a/frappe/desk/doctype/event/test_records.json b/frappe/desk/doctype/event/test_records.json index be094475f1..b8afcfc8ca 100644 --- a/frappe/desk/doctype/event/test_records.json +++ b/frappe/desk/doctype/event/test_records.json @@ -16,7 +16,7 @@ "starts_on": "2014-01-01", "subject":"_Test Event 3", "event_type": "Private", - "event_individuals": [{ + "users": [{ "person": "test1@example.com" }] } diff --git a/frappe/desk/form/meta.py b/frappe/desk/form/meta.py index 37237b32b4..9b7782969c 100644 --- a/frappe/desk/form/meta.py +++ b/frappe/desk/form/meta.py @@ -157,7 +157,7 @@ class FormMeta(Meta): workflow = frappe.get_doc("Workflow", workflow_name) workflow_docs.append(workflow) - for d in workflow.get("workflow_document_states"): + for d in workflow.get("states"): workflow_docs.append(frappe.get_doc("Workflow State", d.state)) self.set("__workflow_docs", workflow_docs) diff --git a/frappe/email/doctype/email_alert/email_alert.json b/frappe/email/doctype/email_alert/email_alert.json index 06bca3b8c3..31f27144d7 100644 --- a/frappe/email/doctype/email_alert/email_alert.json +++ b/frappe/email/doctype/email_alert/email_alert.json @@ -1,152 +1,152 @@ { - "autoname": "hash", - "creation": "2014-07-11 17:18:09.923399", - "docstatus": 0, - "doctype": "DocType", - "document_type": "System", + "autoname": "hash", + "creation": "2014-07-11 17:18:09.923399", + "docstatus": 0, + "doctype": "DocType", + "document_type": "System", "fields": [ { - "default": "1", - "fieldname": "enabled", - "fieldtype": "Check", - "label": "Enabled", + "default": "1", + "fieldname": "enabled", + "fieldtype": "Check", + "label": "Enabled", "permlevel": 0 - }, + }, { - "fieldname": "filters", - "fieldtype": "Section Break", - "label": "Filters", + "fieldname": "filters", + "fieldtype": "Section Break", + "label": "Filters", "permlevel": 0 - }, + }, { - "fieldname": "subject", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Subject", - "permlevel": 0, + "fieldname": "subject", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Subject", + "permlevel": 0, "reqd": 1 - }, - { - "fieldname": "document_type", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Document Type", - "options": "DocType", - "permlevel": 0, - "reqd": 1, + }, + { + "fieldname": "document_type", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Document Type", + "options": "DocType", + "permlevel": 0, + "reqd": 1, "search_index": 1 - }, - { - "fieldname": "event", - "fieldtype": "Select", - "in_list_view": 1, - "label": "Send Alert On", - "options": "\nNew\nSave\nSubmit\nCancel\nDate Change\nValue Change", - "permlevel": 0, - "reqd": 1, + }, + { + "fieldname": "event", + "fieldtype": "Select", + "in_list_view": 1, + "label": "Send Alert On", + "options": "\nNew\nSave\nSubmit\nCancel\nDate Change\nValue Change", + "permlevel": 0, + "reqd": 1, "search_index": 1 - }, + }, { - "depends_on": "eval:doc.event==\"Date Change\"", - "description": "Send alert if date matches this field's value", - "fieldname": "date_changed", - "fieldtype": "Select", - "label": "Date Changed", + "depends_on": "eval:doc.event==\"Date Change\"", + "description": "Send alert if date matches this field's value", + "fieldname": "date_changed", + "fieldtype": "Select", + "label": "Date Changed", "permlevel": 0 - }, - { - "default": "0", - "depends_on": "eval:doc.event==\"Date Change\"", - "description": "[Optional] Send the email X days in advance of the specified date. 0 equals same day.", - "fieldname": "days_in_advance", - "fieldtype": "Int", - "label": "Days in Advance", + }, + { + "default": "0", + "depends_on": "eval:doc.event==\"Date Change\"", + "description": "[Optional] Send the email X days in advance of the specified date. 0 equals same day.", + "fieldname": "days_in_advance", + "fieldtype": "Int", + "label": "Days in Advance", "permlevel": 0 - }, + }, { - "depends_on": "eval:doc.event==\"Value Change\"", - "description": "Send alert if this field's value changes", - "fieldname": "value_changed", - "fieldtype": "Select", - "label": "Value Changed", + "depends_on": "eval:doc.event==\"Value Change\"", + "description": "Send alert if this field's value changes", + "fieldname": "value_changed", + "fieldtype": "Select", + "label": "Value Changed", "permlevel": 0 - }, - { - "depends_on": "", - "description": "Optional: The alert will be sent if this expression is true", - "fieldname": "condition", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Condition", + }, + { + "depends_on": "", + "description": "Optional: The alert will be sent if this expression is true", + "fieldname": "condition", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Condition", "permlevel": 0 - }, + }, { - "fieldname": "column_break_6", - "fieldtype": "Column Break", + "fieldname": "column_break_6", + "fieldtype": "Column Break", "permlevel": 0 - }, + }, { - "fieldname": "html_7", - "fieldtype": "HTML", - "options": "

Condition Examples:

\n
doc.status==\"Open\"\ndoc.due_date==nowdate()\ndoc.total > 40000\n
\n

Hints:

\n
    \n
  1. To check for an event every day, select \"Date Change\" in Event
  2. \n
  3. To send an alert if a particular value changes, select \"Value Change\"
  4. \n
", + "fieldname": "html_7", + "fieldtype": "HTML", + "options": "

Condition Examples:

\n
doc.status==\"Open\"\ndoc.due_date==nowdate()\ndoc.total > 40000\n
\n

Hints:

\n
    \n
  1. To check for an event every day, select \"Date Change\" in Event
  2. \n
  3. To send an alert if a particular value changes, select \"Value Change\"
  4. \n
", "permlevel": 0 - }, + }, { - "fieldname": "column_break_5", - "fieldtype": "Section Break", - "label": "Recipients", + "fieldname": "column_break_5", + "fieldtype": "Section Break", + "label": "Recipients", "permlevel": 0 - }, + }, { - "fieldname": "email_alert_recipients", - "fieldtype": "Table", - "label": "Email Alert Recipients", - "options": "Email Alert Recipient", - "permlevel": 0, + "fieldname": "recipients", + "fieldtype": "Table", + "label": "Recipients", + "options": "Email Alert Recipient", + "permlevel": 0, "reqd": 1 - }, + }, { - "fieldname": "message_sb", - "fieldtype": "Section Break", - "label": "Message", + "fieldname": "message_sb", + "fieldtype": "Section Break", + "label": "Message", "permlevel": 0 - }, + }, { - "fieldname": "message", - "fieldtype": "Text", - "label": "Message", - "permlevel": 0, + "fieldname": "message", + "fieldtype": "Text", + "label": "Message", + "permlevel": 0, "reqd": 1 - }, + }, { - "fieldname": "message_examples", - "fieldtype": "HTML", - "label": "Message Examples", - "options": "
Message Example (Markdown)
\n
Transaction {{ doc.name }} has exceeded Due Date. Please take relevant action\n\n#### Details\n\nCustomer: {{ doc.customer }}\nAmount: {{ doc.total_amount }}
", + "fieldname": "message_examples", + "fieldtype": "HTML", + "label": "Message Examples", + "options": "
Message Example (Markdown)
\n
Transaction {{ doc.name }} has exceeded Due Date. Please take relevant action\n\n#### Details\n\nCustomer: {{ doc.customer }}\nAmount: {{ doc.total_amount }}
", "permlevel": 0 } - ], - "icon": "icon-envelope", - "modified": "2014-07-15 05:07:14.002361", - "modified_by": "Administrator", - "module": "Email", - "name": "Email Alert", - "name_case": "", - "owner": "Administrator", + ], + "icon": "icon-envelope", + "modified": "2014-12-24 15:23:38.989963", + "modified_by": "Administrator", + "module": "Email", + "name": "Email Alert", + "name_case": "", + "owner": "Administrator", "permissions": [ { - "create": 1, - "delete": 1, - "export": 1, - "import": 0, - "permlevel": 0, - "read": 1, - "report": 1, - "role": "System Manager", + "create": 1, + "delete": 1, + "export": 1, + "import": 0, + "permlevel": 0, + "read": 1, + "report": 1, + "role": "System Manager", "write": 1 } - ], - "sort_field": "modified", - "sort_order": "DESC", + ], + "sort_field": "modified", + "sort_order": "DESC", "title_field": "subject" -} +} \ No newline at end of file diff --git a/frappe/email/doctype/email_alert/email_alert.py b/frappe/email/doctype/email_alert/email_alert.py index 41d2327a14..d9df8ad1dd 100644 --- a/frappe/email/doctype/email_alert/email_alert.py +++ b/frappe/email/doctype/email_alert/email_alert.py @@ -72,7 +72,7 @@ def evaluate_alert(doc, alert, event): doc.name, alert.value_changed): return # value not changed - for recipient in alert.email_alert_recipients: + for recipient in alert.recipients: recipients = [] if recipient.condition: if not eval(recipient.condition, context): diff --git a/frappe/email/doctype/email_alert/test_records.json b/frappe/email/doctype/email_alert/test_records.json index dfe87aafe0..0555beeb47 100644 --- a/frappe/email/doctype/email_alert/test_records.json +++ b/frappe/email/doctype/email_alert/test_records.json @@ -5,7 +5,7 @@ "document_type": "Comment", "event": "New", "message": "New comment {{ doc.comment }} created", - "email_alert_recipients": [ + "recipients": [ { "email_by_document_field": "owner" } ] }, @@ -15,7 +15,7 @@ "document_type": "Comment", "event": "Save", "message": "New comment {{ doc.comment }} saved", - "email_alert_recipients": [ + "recipients": [ { "email_by_document_field": "owner" } ] }, @@ -26,7 +26,7 @@ "event": "Save", "condition": "doc.event_type=='Public'", "message": "A new public event {{ doc.subject }} on {{ doc.starts_on }} is created", - "email_alert_recipients": [ + "recipients": [ { "email_by_document_field": "owner" } ] }, @@ -37,7 +37,7 @@ "event": "Value Change", "value_changed": "description", "message": "Description changed", - "email_alert_recipients": [ + "recipients": [ { "email_by_document_field": "owner" } ] }, @@ -49,7 +49,7 @@ "date_changed": "starts_on", "days_in_advance": 2, "message": "Description changed", - "email_alert_recipients": [ + "recipients": [ { "email_by_document_field": "owner" } ] } diff --git a/frappe/model/__init__.py b/frappe/model/__init__.py index b5766a1d30..b0322ad329 100644 --- a/frappe/model/__init__.py +++ b/frappe/model/__init__.py @@ -35,7 +35,6 @@ def copytables(srctype, src, srcfield, tartype, tar, tarfield, srcfields, tarfie return l def db_exists(dt, dn): - import frappe return frappe.db.exists(dt, dn) def delete_fields(args_dict, delete=0): @@ -97,13 +96,13 @@ def rename_field(doctype, old_fieldname, new_fieldname): frappe.db.sql("""update `tab%s` set `%s`=`%s`""" % \ (doctype, new_fieldname, old_fieldname)) + update_reports(doctype, old_fieldname, new_fieldname) + update_users_report_view_settings(doctype, old_fieldname, new_fieldname) + # update in property setter frappe.db.sql("""update `tabProperty Setter` set field_name = %s where doc_type=%s and field_name=%s""", (new_fieldname, doctype, old_fieldname)) - update_reports(doctype, old_fieldname, new_fieldname) - update_users_report_view_settings(doctype, old_fieldname, new_fieldname) - def update_reports(doctype, old_fieldname, new_fieldname): def _get_new_sort_by(report_dict, report, key): sort_by = report_dict.get(key) or "" diff --git a/frappe/print/doctype/print_format/print_format.json b/frappe/print/doctype/print_format/print_format.json index eddf598557..5e02677a9e 100644 --- a/frappe/print/doctype/print_format/print_format.json +++ b/frappe/print/doctype/print_format/print_format.json @@ -105,7 +105,7 @@ "fieldname": "print_format_help", "fieldtype": "HTML", "label": "Print Format Help", - "options": "

Print Format Help

\n
\n

Introduction

\n

Print Formats are rendered on the server side using the Jinja Templating Language. All forms have access to the doc object which contains information about the document that is being formatted. You can also access common utilities via the frappe module.

\n

For styling, the Boostrap CSS framework is provided and you can enjoy the full range of classes.

\n
\n

References

\n
    \n\t
  1. Jinja Tempalting Language: Reference
  2. \n\t
  3. Bootstrap CSS Framework
  4. \n
\n
\n

Example

\n
<h3>{{ doc.select_print_heading or \"Invoice\" }}</h3>\n<div class=\"row\">\n\t<div class=\"col-md-3 text-right\">Customer Name</div>\n\t<div class=\"col-md-9\">{{ doc.customer_name }}</div>\n</div>\n<div class=\"row\">\n\t<div class=\"col-md-3 text-right\">Date</div>\n\t<div class=\"col-md-9\">{{ doc.get_formatted(\"invoice_date\") }}</div>\n</div>\n<table class=\"table table-bordered\">\n\t<tbody>\n\t\t<tr>\n\t\t\t<th>Sr</th>\n\t\t\t<th>Item Name</th>\n\t\t\t<th>Description</th>\n\t\t\t<th class=\"text-right\">Qty</th>\n\t\t\t<th class=\"text-right\">Rate</th>\n\t\t\t<th class=\"text-right\">Amount</th>\n\t\t</tr>\n\t\t{%- for row in doc.entries -%}\n\t\t<tr>\n\t\t\t<td style=\"width: 3%;\">{{ row.idx }}</td>\n\t\t\t<td style=\"width: 20%;\">\n\t\t\t\t{{ row.item_name }}\n\t\t\t\t{% if row.item_code != row.item_name -%}\n\t\t\t\t<br>Item Code: {{ row.item_code}}\n\t\t\t\t{%- endif %}\n\t\t\t</td>\n\t\t\t<td style=\"width: 37%;\">\n\t\t\t\t<div style=\"border: 0px;\">{{ row.description }}</div></td>\n\t\t\t<td style=\"width: 10%; text-align: right;\">{{ row.qty }} {{ row.uom or row.stock_uom }}</td>\n\t\t\t<td style=\"width: 15%; text-align: right;\">{{\n\t\t\t\trow.get_formatted(\"rate\", doc) }}</td>\n\t\t\t<td style=\"width: 15%; text-align: right;\">{{\n\t\t\t\trow.get_formatted(\"amount\", doc) }}</td>\n\t\t</tr>\n\t\t{%- endfor -%}\n\t</tbody>\n</table>
\n
\n

Common Functions

\n\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n
doc.get_formatted(\"[fieldname]\", [parent_doc])Get document value formatted as Date, Currency etc. Pass parent doc for curreny type fields.
frappe.db.get_value(\"[doctype]\", \"[name]\", \"fieldname\")Get value from another document.
\n", + "options": "

Print Format Help

\n
\n

Introduction

\n

Print itemsFormats are rendered on the server side using the Jinja Templating Language. All forms have access to the doc object which contains information about the document that is being formatted. You can also access common utilities via the frappe module.

\n

For styling, the Boostrap CSS framework is provided and you can enjoy the full range of classes.

\n
\n

References

\n
    \n\t
  1. Jinja Tempalting Language: Reference
  2. \n\t
  3. Bootstrap CSS Framework
  4. \n
\n
\n

Example

\n
<h3>{{ doc.select_print_heading or \"Invoice\" }}</h3>\n<div class=\"row\">\n\t<div class=\"col-md-3 text-right\">Customer Name</div>\n\t<div class=\"col-md-9\">{{ doc.customer_name }}</div>\n</div>\n<div class=\"row\">\n\t<div class=\"col-md-3 text-right\">Date</div>\n\t<div class=\"col-md-9\">{{ doc.get_formatted(\"invoice_date\") }}</div>\n</div>\n<table class=\"table table-bordered\">\n\t<tbody>\n\t\t<tr>\n\t\t\t<th>Sr</th>\n\t\t\t<th>Item Name</th>\n\t\t\t<th>Description</th>\n\t\t\t<th class=\"text-right\">Qty</th>\n\t\t\t<th class=\"text-right\">Rate</th>\n\t\t\t<th class=\"text-right\">Amount</th>\n\t\t</tr>\n\t\t{%- for row in doc.items -%}\n\t\t<tr>\n\t\t\t<td style=\"width: 3%;\">{{ row.idx }}</td>\n\t\t\t<td style=\"width: 20%;\">\n\t\t\t\t{{ row.item_name }}\n\t\t\t\t{% if row.item_code != row.item_name -%}\n\t\t\t\t<br>Item Code: {{ row.item_code}}\n\t\t\t\t{%- endif %}\n\t\t\t</td>\n\t\t\t<td style=\"width: 37%;\">\n\t\t\t\t<div style=\"border: 0px;\">{{ row.description }}</div></td>\n\t\t\t<td style=\"width: 10%; text-align: right;\">{{ row.qty }} {{ row.uom or row.stock_uom }}</td>\n\t\t\t<td style=\"width: 15%; text-align: right;\">{{\n\t\t\t\trow.get_formatted(\"rate\", doc) }}</td>\n\t\t\t<td style=\"width: 15%; text-align: right;\">{{\n\t\t\t\trow.get_formatted(\"amount\", doc) }}</td>\n\t\t</tr>\n\t\t{%- endfor -%}\n\t</tbody>\n</table>
\n
\n

Common Functions

\n\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n
doc.get_formatted(\"[fieldname]\", [parent_doc])Get document value formatted as Date, Currency etc. Pass parent doc for curreny type fields.
frappe.db.get_value(\"[doctype]\", \"[name]\", \"fieldname\")Get value from another document.
\n", "permlevel": 0 } ], @@ -118,7 +118,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2014-07-31 03:39:35.898712", + "modified": "2014-12-25 03:39:35.898712", "modified_by": "Administrator", "module": "Print", "name": "Print Format", diff --git a/frappe/public/js/frappe/form/grid.js b/frappe/public/js/frappe/form/grid.js index e661fcc156..e737c92459 100644 --- a/frappe/public/js/frappe/form/grid.js +++ b/frappe/public/js/frappe/form/grid.js @@ -425,7 +425,7 @@ frappe.ui.form.GridRow = Class.extend({ this.form_panel.toggle(true); if(this.frm.doc.docstatus===0) { var first = this.form_area.find(":input:first"); - if(first.length && first.attr("data-fieldtype")!="Date") { + if(first.length && !in_list(["Date", "Datetime", "Time"], first.attr("data-fieldtype"))) { try { first.get(0).focus(); } catch(e) { diff --git a/frappe/public/js/frappe/model/workflow.js b/frappe/public/js/frappe/model/workflow.js index 1b7d6ada52..febf0a22e0 100644 --- a/frappe/public/js/frappe/model/workflow.js +++ b/frappe/public/js/frappe/model/workflow.js @@ -23,18 +23,18 @@ frappe.workflow = { }, get_default_state: function(doctype) { frappe.workflow.setup(doctype); - return frappe.workflow.workflows[doctype].workflow_document_states[0].state; + return frappe.workflow.workflows[doctype].states[0].state; }, get_transitions: function(doctype, state) { frappe.workflow.setup(doctype); - return frappe.get_children(frappe.workflow.workflows[doctype], "workflow_transitions", {state:state}); + return frappe.get_children(frappe.workflow.workflows[doctype], "transitions", {state:state}); }, get_document_state: function(doctype, state) { frappe.workflow.setup(doctype); - return frappe.get_children(frappe.workflow.workflows[doctype], "workflow_document_states", {state:state})[0]; + return frappe.get_children(frappe.workflow.workflows[doctype], "states", {state:state})[0]; }, get_next_state: function(doctype, state, action) { - return frappe.get_children(frappe.workflow.workflows[doctype], "workflow_transitions", { + return frappe.get_children(frappe.workflow.workflows[doctype], "transitions", { state:state, action:action})[0].next_state; }, is_read_only: function(doctype, name) { @@ -57,7 +57,7 @@ frappe.workflow = { return false; }, get_update_fields: function(doctype) { - var update_fields = $.unique($.map(frappe.workflow.workflows[doctype].workflow_document_states || [], + var update_fields = $.unique($.map(frappe.workflow.workflows[doctype].states || [], function(d) { return d.update_field; })); diff --git a/frappe/tests/test_client_login.py b/frappe/tests/test_client_login.py index e5a44d5ced..e6e92718ec 100644 --- a/frappe/tests/test_client_login.py +++ b/frappe/tests/test_client_login.py @@ -21,7 +21,7 @@ from frappe.utils import sel # def test_material_request(self): # sel.new_doc("Stock", "Material Request") - # sel.add_child("indent_details") + # sel.add_child("items") # sel.set_field("item_code", "_Test Item") # sel.set_field("schedule_date", "10-10-2014") # sel.primary_action() diff --git a/frappe/tests/test_data_import.py b/frappe/tests/test_data_import.py index 70ef531e8e..7e8bfe6803 100644 --- a/frappe/tests/test_data_import.py +++ b/frappe/tests/test_data_import.py @@ -83,4 +83,4 @@ class TestDataImport(unittest.TestCase): importer.upload(content) ev = frappe.get_doc("Event", {"subject":"__Test Event"}) - self.assertTrue("Administrator" in [d.person for d in ev.event_individuals]) + self.assertTrue("Administrator" in [d.person for d in ev.users]) diff --git a/frappe/tests/test_document.py b/frappe/tests/test_document.py index 4567473f27..c8c6d70beb 100644 --- a/frappe/tests/test_document.py +++ b/frappe/tests/test_document.py @@ -45,7 +45,7 @@ class TestDocument(unittest.TestCase): "subject":"test-doc-test-event 2", "starts_on": "2014-01-01", "event_type": "Public", - "event_individuals": [ + "users": [ { "person": "Administrator" } @@ -57,7 +57,7 @@ class TestDocument(unittest.TestCase): "test-doc-test-event 2") d1 = frappe.get_doc("Event", d.name) - self.assertTrue(d1.event_individuals[0].person, "Administrator") + self.assertTrue(d1.users[0].person, "Administrator") def test_update(self): d = self.test_insert() diff --git a/frappe/utils/pdf.py b/frappe/utils/pdf.py index 0837e816f5..e92b5b23fb 100644 --- a/frappe/utils/pdf.py +++ b/frappe/utils/pdf.py @@ -17,6 +17,7 @@ def get_pdf(html, options=None): 'margin-bottom': '15mm', 'margin-left': '15mm', 'encoding': "UTF-8", + 'quiet': None, 'no-outline': None }) diff --git a/frappe/workflow/doctype/workflow/test_records.json b/frappe/workflow/doctype/workflow/test_records.json new file mode 100644 index 0000000000..bc7b89bc12 --- /dev/null +++ b/frappe/workflow/doctype/workflow/test_records.json @@ -0,0 +1,6 @@ +[ + { + "doctype": "Workflow", + "name": "_Test Workflow 1" + } +] diff --git a/frappe/workflow/doctype/workflow/test_workflow.py b/frappe/workflow/doctype/workflow/test_workflow.py new file mode 100644 index 0000000000..4933517fbb --- /dev/null +++ b/frappe/workflow/doctype/workflow/test_workflow.py @@ -0,0 +1,10 @@ +# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors +# See license.txt + +import frappe +import unittest + +test_records = frappe.get_test_records('Workflow') + +class TestWorkflow(unittest.TestCase): + pass diff --git a/frappe/workflow/doctype/workflow/workflow.json b/frappe/workflow/doctype/workflow/workflow.json index 69eba829ee..a5ae280906 100644 --- a/frappe/workflow/doctype/workflow/workflow.json +++ b/frappe/workflow/doctype/workflow/workflow.json @@ -1,6 +1,6 @@ { "autoname": "field:workflow_name", - "creation": "2012-12-28 10:49:55.000000", + "creation": "2012-12-28 10:49:55", "description": "Defines workflow states and rules for a document.", "docstatus": 0, "doctype": "DocType", @@ -9,6 +9,7 @@ { "fieldname": "workflow_name", "fieldtype": "Data", + "in_list_view": 1, "label": "Workflow Name", "permlevel": 0, "read_only": 0, @@ -18,6 +19,7 @@ "description": "DocType on which this Workflow is applicable.", "fieldname": "document_type", "fieldtype": "Link", + "in_list_view": 1, "label": "Document Type", "options": "DocType", "permlevel": 0, @@ -27,6 +29,7 @@ "description": "If checked, all other workflows become inactive.", "fieldname": "is_active", "fieldtype": "Check", + "in_list_view": 1, "label": "Is Active", "permlevel": 0 }, @@ -39,9 +42,9 @@ }, { "description": "All possible Workflow States and roles of the workflow.
Docstatus Options: 0 is\"Saved\", 1 is \"Submitted\" and 2 is \"Cancelled\"", - "fieldname": "workflow_document_states", + "fieldname": "states", "fieldtype": "Table", - "label": "Workflow Document States", + "label": "Document States", "options": "Workflow Document State", "permlevel": 0, "reqd": 1 @@ -55,9 +58,9 @@ }, { "description": "Rules defining transition of state in the workflow.", - "fieldname": "workflow_transitions", + "fieldname": "transitions", "fieldtype": "Table", - "label": "Workflow Transitions", + "label": "Transitions", "options": "Workflow Transition", "permlevel": 0, "reqd": 1 @@ -73,14 +76,14 @@ ], "icon": "icon-random", "idx": 1, - "modified": "2014-01-20 17:49:35.000001", + "modified": "2014-12-26 16:53:17.720709", "modified_by": "Administrator", "module": "Workflow", "name": "Workflow", "owner": "Administrator", "permissions": [ { - "cancel": 1, + "cancel": 0, "create": 1, "delete": 1, "email": 1, @@ -88,6 +91,7 @@ "print": 1, "read": 1, "role": "System Manager", + "submit": 0, "write": 1 } ] diff --git a/frappe/workflow/doctype/workflow/workflow.py b/frappe/workflow/doctype/workflow/workflow.py index d34b7126a4..b8ace4b661 100644 --- a/frappe/workflow/doctype/workflow/workflow.py +++ b/frappe/workflow/doctype/workflow/workflow.py @@ -39,7 +39,7 @@ class Workflow(Document): def update_default_workflow_status(self): docstatus_map = {} - states = self.get("workflow_document_states") + states = self.get("states") for d in states: if not d.doc_status in docstatus_map: frappe.db.sql("""update `tab%s` set `%s` = %s where \ @@ -49,13 +49,13 @@ class Workflow(Document): def validate_docstatus(self): def get_state(state): - for s in self.workflow_document_states: + for s in self.states: if s.state==state: return s frappe.throw(frappe._("{0} not a valid State").format(state)) - for t in self.workflow_transitions: + for t in self.transitions: state = get_state(t.state) next_state = get_state(t.next_state)