diff --git a/frappe/boot.py b/frappe/boot.py index 0e4cce7381..483cfd3127 100644 --- a/frappe/boot.py +++ b/frappe/boot.py @@ -146,7 +146,8 @@ def add_home_page(bootinfo, docs): try: page = frappe.desk.desk_page.get(home_page) except (frappe.DoesNotExistError, frappe.PermissionError): - frappe.message_log.pop() + if frappe.message_log: + frappe.message_log.pop() page = frappe.desk.desk_page.get('desktop') bootinfo['home_page'] = page.name diff --git a/frappe/custom/doctype/customize_form/customize_form.py b/frappe/custom/doctype/customize_form/customize_form.py index 85b7bc9e00..6551a61c7f 100644 --- a/frappe/custom/doctype/customize_form/customize_form.py +++ b/frappe/custom/doctype/customize_form/customize_form.py @@ -13,48 +13,48 @@ from frappe.model.document import Document from frappe.model import no_value_fields from frappe.core.doctype.doctype.doctype import validate_fields_for_doctype +doctype_properties = { + 'search_fields': 'Data', + 'title_field': 'Data', + 'sort_field': 'Data', + 'sort_order': 'Data', + 'default_print_format': 'Data', + 'read_only_onload': 'Check', + 'allow_copy': 'Check', + 'max_attachments': 'Int' +} + +docfield_properties = { + 'idx': 'Int', + 'label': 'Data', + 'fieldtype': 'Select', + 'options': 'Text', + 'permlevel': 'Int', + 'width': 'Data', + 'print_width': 'Data', + 'reqd': 'Check', + 'unique': 'Check', + 'ignore_user_permissions': 'Check', + 'in_filter': 'Check', + 'in_list_view': 'Check', + 'hidden': 'Check', + 'collapsible': 'Check', + 'collapsible_depends_on': 'Data', + 'print_hide': 'Check', + 'report_hide': 'Check', + 'allow_on_submit': 'Check', + 'depends_on': 'Data', + 'description': 'Text', + 'default': 'Text', + 'precision': 'Select', + 'read_only': 'Check', + 'length': 'Int' +} + +allowed_fieldtype_change = (('Currency', 'Float', 'Percent'), ('Small Text', 'Data'), + ('Text', 'Text Editor', 'Code'), ('Data', 'Select'), ('Text', 'Small Text')) + class CustomizeForm(Document): - doctype_properties = { - 'search_fields': 'Data', - 'title_field': 'Data', - 'sort_field': 'Data', - 'sort_order': 'Data', - 'default_print_format': 'Data', - 'read_only_onload': 'Check', - 'allow_copy': 'Check', - 'max_attachments': 'Int' - } - - docfield_properties = { - 'idx': 'Int', - 'label': 'Data', - 'fieldtype': 'Select', - 'options': 'Text', - 'permlevel': 'Int', - 'width': 'Data', - 'print_width': 'Data', - 'reqd': 'Check', - 'unique': 'Check', - 'ignore_user_permissions': 'Check', - 'in_filter': 'Check', - 'in_list_view': 'Check', - 'hidden': 'Check', - 'collapsible': 'Check', - 'collapsible_depends_on': 'Data', - 'print_hide': 'Check', - 'report_hide': 'Check', - 'allow_on_submit': 'Check', - 'depends_on': 'Data', - 'description': 'Text', - 'default': 'Text', - 'precision': 'Select', - 'read_only': 'Check', - 'length': 'Int' - } - - allowed_fieldtype_change = (('Currency', 'Float', 'Percent'), ('Small Text', 'Data'), - ('Text', 'Text Editor', 'Code'), ('Data', 'Select'), ('Text', 'Small Text')) - def on_update(self): frappe.db.sql("delete from tabSingles where doctype='Customize Form'") frappe.db.sql("delete from `tabCustomize Form Field`") @@ -67,12 +67,12 @@ class CustomizeForm(Document): meta = frappe.get_meta(self.doc_type) # doctype properties - for property in self.doctype_properties: + for property in doctype_properties: self.set(property, meta.get(property)) for d in meta.get("fields"): new_d = {"fieldname": d.fieldname, "is_custom_field": d.get("is_custom_field"), "name": d.name} - for property in self.docfield_properties: + for property in docfield_properties: new_d[property] = d.get(property) self.append("fields", new_d) @@ -106,10 +106,10 @@ class CustomizeForm(Document): def set_property_setters(self): meta = frappe.get_meta(self.doc_type) # doctype property setters - for property in self.doctype_properties: + for property in doctype_properties: if self.get(property) != meta.get(property): self.make_property_setter(property=property, value=self.get(property), - property_type=self.doctype_properties[property]) + property_type=doctype_properties[property]) update_db = False for df in self.get("fields"): @@ -121,7 +121,7 @@ class CustomizeForm(Document): if not meta_df or meta_df[0].get("is_custom_field"): continue - for property in self.docfield_properties: + for property in docfield_properties: if property != "idx" and df.get(property) != meta_df[0].get(property): if property == "fieldtype": self.validate_fieldtype_change(df, meta_df[0].get(property), df.get(property)) @@ -150,7 +150,7 @@ class CustomizeForm(Document): continue self.make_property_setter(property=property, value=df.get(property), - property_type=self.docfield_properties[property], fieldname=df.fieldname) + property_type=docfield_properties[property], fieldname=df.fieldname) if update_db: from frappe.model.db_schema import updatedb @@ -168,7 +168,7 @@ class CustomizeForm(Document): def add_custom_field(self, df): d = frappe.new_doc("Custom Field") d.dt = self.doc_type - for property in self.docfield_properties: + for property in docfield_properties: d.set(property, df.get(property)) d.insert() df.fieldname = d.fieldname @@ -181,7 +181,7 @@ class CustomizeForm(Document): custom_field = frappe.get_doc("Custom Field", meta_df[0].name) changed = False - for property in self.docfield_properties: + for property in docfield_properties: if df.get(property) != custom_field.get(property): if property == "fieldtype": self.validate_fieldtype_change(df, meta_df[0].get(property), df.get(property)) @@ -260,7 +260,7 @@ class CustomizeForm(Document): def validate_fieldtype_change(self, df, old_value, new_value): allowed = False - for allowed_changes in self.allowed_fieldtype_change: + for allowed_changes in allowed_fieldtype_change: if (old_value in allowed_changes and new_value in allowed_changes): allowed = True if not allowed: diff --git a/frappe/hooks.py b/frappe/hooks.py index 37c7b1575c..8d3625eace 100644 --- a/frappe/hooks.py +++ b/frappe/hooks.py @@ -163,7 +163,8 @@ scheduler_events = { default_background = "/assets/frappe/images/ui/into-the-dawn.jpg" get_translated_dict = { - ("doctype", "System Settings"): "frappe.geo.country_info.get_translated_dict" + ("doctype", "System Settings"): "frappe.geo.country_info.get_translated_dict", + ("page", "setup-wizard"): "frappe.geo.country_info.get_translated_dict" } sounds = [ @@ -176,7 +177,3 @@ sounds = [ # {"name": "alert", "src": "/assets/frappe/sounds/alert.mp3"}, # {"name": "chime", "src": "/assets/frappe/sounds/chime.mp3"}, ] - -get_translated_dict = { - ("page", "setup-wizard"): "frappe.geo.country_info.get_translated_dict", -} diff --git a/frappe/templates/generators/web_form.html b/frappe/templates/generators/web_form.html index e582d128e7..ab60acdf5d 100644 --- a/frappe/templates/generators/web_form.html +++ b/frappe/templates/generators/web_form.html @@ -44,8 +44,8 @@ {%- macro properties(field) %} name="{{ field.fieldname }}" id="{{ field.fieldname }}" - {% if field.placeholder %}placeholder="{{ field.placeholder }}"{% endif %} - data-label="{{ field.label }}" data-fieldtype="{{ field.fieldtype }}" + {% if field.placeholder -%} placeholder="{{ _(field.placeholder) }}" {%- endif %} + data-label="{{ _(field.label) }}" data-fieldtype="{{ field.fieldtype }}" {{ (field.reqd and field.fieldtype!="Attach") and "required" or "" }} {{ field.read_only and "disabled" or "" }} {% endmacro -%} @@ -54,19 +54,19 @@ {%- macro help(field) -%} {% if field.description -%} - {{ field.description }} + {{ _(field.description) }} {%- endif -%} {%- endmacro %} {% macro label(field) %} + {{ _(field.label) }} {% endmacro %} {% macro render_field(field) %} {% if field.hidden %} + name="{{ field.fieldname }}" {% if field.default -%} value="{{ field.default }}" {%- endif %}> {% elif field.fieldtype == "HTML" and field.options %}