diff --git a/frappe/__version__.py b/frappe/__version__.py index 897e6be2ff..4e499ea83a 100644 --- a/frappe/__version__.py +++ b/frappe/__version__.py @@ -1 +1 @@ -__version__ = "4.10.0" +__version__ = "4.10.1" diff --git a/frappe/core/doctype/communication/communication.py b/frappe/core/doctype/communication/communication.py index f18c89a5b8..cc9e10ef41 100644 --- a/frappe/core/doctype/communication/communication.py +++ b/frappe/core/doctype/communication/communication.py @@ -37,7 +37,9 @@ def make(doctype=None, name=None, content=None, subject=None, sent_or_received = sender=None, recipients=None, communication_medium="Email", send_email=False, print_html=None, print_format=None, attachments='[]', send_me_a_copy=False, set_lead=True, date=None): - if doctype and name and not frappe.has_permission(doctype, "email", name): + is_error_report = (doctype=="User" and name==frappe.session.user and subject=="Error Report") + + if doctype and name and not is_error_report and not frappe.has_permission(doctype, "email", name): raise frappe.PermissionError("You are not allowed to send emails related to: {doctype} {name}".format( doctype=doctype, name=name)) diff --git a/frappe/core/doctype/customize_form/test_customize_form.py b/frappe/core/doctype/customize_form/test_customize_form.py index db4115fb8b..5f65b9e4a4 100644 --- a/frappe/core/doctype/customize_form/test_customize_form.py +++ b/frappe/core/doctype/customize_form/test_customize_form.py @@ -47,7 +47,7 @@ class TestCustomizeForm(unittest.TestCase): d = self.get_customize_form("User") self.assertEquals(d.doc_type, "User") - self.assertEquals(len(d.get("customize_form_fields")), 55) + self.assertEquals(len(d.get("customize_form_fields")), 48) 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) diff --git a/frappe/core/doctype/event/event.py b/frappe/core/doctype/event/event.py index 9f3afbc64f..a68e4d6dad 100644 --- a/frappe/core/doctype/event/event.py +++ b/frappe/core/doctype/event/event.py @@ -14,6 +14,11 @@ class Event(Document): def validate(self): if self.starts_on and self.ends_on and self.starts_on > self.ends_on: frappe.msgprint(frappe._("Event end must be after start"), raise_exception=True) + + if self.starts_on == self.ends_on: + # this scenario doesn't make sense i.e. it starts and ends at the same second! + self.ends_on = None + if self.starts_on and self.ends_on and int(date_diff(self.ends_on.split(" ")[0], self.starts_on.split(" ")[0])) > 0 \ and self.repeat_on == "Every Day": frappe.msgprint(frappe._("Every day events should finish on the same day."), raise_exception=True) diff --git a/frappe/core/doctype/print_format/print_format.json b/frappe/core/doctype/print_format/print_format.json index ef2306509a..1c3cc5454a 100644 --- a/frappe/core/doctype/print_format/print_format.json +++ b/frappe/core/doctype/print_format/print_format.json @@ -1,183 +1,183 @@ { - "allow_copy": 0, - "allow_rename": 0, - "autoname": "Prompt", - "creation": "2013-01-23 19:54:43", - "docstatus": 0, - "doctype": "DocType", + "allow_copy": 0, + "allow_rename": 0, + "autoname": "Prompt", + "creation": "2013-01-23 19:54:43", + "docstatus": 0, + "doctype": "DocType", "fields": [ { - "description": "Belongs to", - "fieldname": "doc_type", - "fieldtype": "Link", - "in_filter": 1, - "in_list_view": 1, - "label": "DocType", - "options": "DocType", - "permlevel": 0, - "reqd": 1, + "description": "Belongs to", + "fieldname": "doc_type", + "fieldtype": "Link", + "in_filter": 1, + "in_list_view": 1, + "label": "DocType", + "options": "DocType", + "permlevel": 0, + "reqd": 1, "search_index": 0 - }, + }, { - "allow_on_submit": 0, - "fieldname": "module", - "fieldtype": "Link", - "hidden": 0, - "in_filter": 1, - "in_list_view": 1, - "label": "Module", - "no_copy": 0, - "oldfieldname": "module", - "oldfieldtype": "Select", - "options": "Module Def", - "permlevel": 0, - "print_hide": 0, - "report_hide": 0, - "reqd": 1, + "allow_on_submit": 0, + "fieldname": "module", + "fieldtype": "Link", + "hidden": 0, + "in_filter": 1, + "in_list_view": 1, + "label": "Module", + "no_copy": 0, + "oldfieldname": "module", + "oldfieldtype": "Select", + "options": "Module Def", + "permlevel": 0, + "print_hide": 0, + "report_hide": 0, + "reqd": 1, "search_index": 1 - }, + }, { - "fieldname": "column_break_3", - "fieldtype": "Column Break", + "fieldname": "column_break_3", + "fieldtype": "Column Break", "permlevel": 0 - }, + }, { - "allow_on_submit": 0, - "default": "No", - "fieldname": "standard", - "fieldtype": "Select", - "hidden": 0, - "in_filter": 1, - "in_list_view": 1, - "label": "Standard", - "no_copy": 1, - "oldfieldname": "standard", - "oldfieldtype": "Select", - "options": "No\nYes", - "permlevel": 1, - "print_hide": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 1, + "allow_on_submit": 0, + "default": "No", + "fieldname": "standard", + "fieldtype": "Select", + "hidden": 0, + "in_filter": 1, + "in_list_view": 1, + "label": "Standard", + "no_copy": 1, + "oldfieldname": "standard", + "oldfieldtype": "Select", + "options": "No\nYes", + "permlevel": 1, + "print_hide": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 1, "search_index": 1 - }, + }, { - "default": "Server", - "description": "Client-side formats are now deprecated", - "fieldname": "print_format_type", - "fieldtype": "Select", - "in_list_view": 1, - "label": "Print Format Type", - "options": "Server\nClient", - "permlevel": 0, + "default": "Server", + "description": "Client-side formats are now deprecated", + "fieldname": "print_format_type", + "fieldtype": "Select", + "in_list_view": 1, + "label": "Print Format Type", + "options": "Server\nClient", + "permlevel": 0, "read_only": 0 - }, + }, { - "fieldname": "disabled", - "fieldtype": "Check", - "label": "Disabled", + "fieldname": "disabled", + "fieldtype": "Check", + "label": "Disabled", "permlevel": 0 - }, + }, { - "fieldname": "section_break_6", - "fieldtype": "Section Break", + "fieldname": "section_break_6", + "fieldtype": "Section Break", "permlevel": 0 - }, + }, { - "allow_on_submit": 0, - "depends_on": "", - "fieldname": "html", - "fieldtype": "Code", - "hidden": 0, - "in_filter": 0, - "label": "HTML", - "no_copy": 0, - "oldfieldname": "html", - "oldfieldtype": "Text Editor", - "options": "HTML", - "permlevel": 0, - "print_hide": 0, - "report_hide": 0, - "reqd": 0, + "allow_on_submit": 0, + "depends_on": "", + "fieldname": "html", + "fieldtype": "Code", + "hidden": 0, + "in_filter": 0, + "label": "HTML", + "no_copy": 0, + "oldfieldname": "html", + "oldfieldtype": "Text Editor", + "options": "HTML", + "permlevel": 0, + "print_hide": 0, + "report_hide": 0, + "reqd": 0, "search_index": 0 - }, + }, { - "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", + "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-xs-3 text-right\">Customer Name</div>\n\t<div class=\"col-xs-9\">{{ doc.customer_name }}</div>\n</div>\n<div class=\"row\">\n\t<div class=\"col-xs-3 text-right\">Date</div>\n\t<div class=\"col-xs-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", "permlevel": 0 } - ], - "hide_heading": 0, - "hide_toolbar": 0, - "icon": "icon-print", - "idx": 1, - "in_create": 0, - "in_dialog": 0, - "issingle": 0, - "istable": 0, - "max_attachments": 0, - "modified": "2014-07-31 03:39:35.898711", - "modified_by": "Administrator", - "module": "Core", - "name": "Print Format", - "owner": "Administrator", + ], + "hide_heading": 0, + "hide_toolbar": 0, + "icon": "icon-print", + "idx": 1, + "in_create": 0, + "in_dialog": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2015-01-23 03:39:35.898711", + "modified_by": "Administrator", + "module": "Core", + "name": "Print Format", + "owner": "Administrator", "permissions": [ { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Administrator", - "submit": 0, + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Administrator", + "submit": 0, "write": 1 - }, + }, { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "submit": 0, + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "submit": 0, "write": 1 - }, + }, { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "permlevel": 1, - "read": 1, - "report": 1, - "role": "System Manager", + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "permlevel": 1, + "read": 1, + "report": 1, + "role": "System Manager", "submit": 0 - }, + }, { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "permlevel": 1, - "read": 1, - "report": 1, - "role": "Administrator", - "submit": 0, + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "permlevel": 1, + "read": 1, + "report": 1, + "role": "Administrator", + "submit": 0, "write": 1 } - ], - "read_only": 0, - "read_only_onload": 0, - "sort_field": "modified", + ], + "read_only": 0, + "read_only_onload": 0, + "sort_field": "modified", "sort_order": "DESC" -} \ No newline at end of file +} diff --git a/frappe/hooks.py b/frappe/hooks.py index dc5e69ae2f..78dcd38a31 100644 --- a/frappe/hooks.py +++ b/frappe/hooks.py @@ -3,7 +3,7 @@ app_title = "Frappe Framework" app_publisher = "Web Notes Technologies Pvt. Ltd." app_description = "Full Stack Web Application Framework in Python" app_icon = "assets/frappe/images/frappe.svg" -app_version = "4.10.0" +app_version = "4.10.1" app_color = "#3498db" app_email = "support@frappe.io" diff --git a/frappe/public/css/font/noto_sans/NotoSans-Bold-webfont.eot b/frappe/public/css/font/noto_sans/NotoSans-Bold-webfont.eot new file mode 100755 index 0000000000..b6c34300c7 Binary files /dev/null and b/frappe/public/css/font/noto_sans/NotoSans-Bold-webfont.eot differ diff --git a/frappe/public/css/font/noto_sans/NotoSans-Bold-webfont.svg b/frappe/public/css/font/noto_sans/NotoSans-Bold-webfont.svg new file mode 100755 index 0000000000..32c319fdfe --- /dev/null +++ b/frappe/public/css/font/noto_sans/NotoSans-Bold-webfont.svg @@ -0,0 +1,1825 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/frappe/public/css/font/noto_sans/NotoSans-Bold-webfont.ttf b/frappe/public/css/font/noto_sans/NotoSans-Bold-webfont.ttf new file mode 100755 index 0000000000..7c51ede6b3 Binary files /dev/null and b/frappe/public/css/font/noto_sans/NotoSans-Bold-webfont.ttf differ diff --git a/frappe/public/css/font/noto_sans/NotoSans-Bold-webfont.woff b/frappe/public/css/font/noto_sans/NotoSans-Bold-webfont.woff new file mode 100755 index 0000000000..d24fa4023d Binary files /dev/null and b/frappe/public/css/font/noto_sans/NotoSans-Bold-webfont.woff differ diff --git a/frappe/public/css/font/noto_sans/NotoSans-BoldItalic-webfont.eot b/frappe/public/css/font/noto_sans/NotoSans-BoldItalic-webfont.eot new file mode 100755 index 0000000000..5772df5067 Binary files /dev/null and b/frappe/public/css/font/noto_sans/NotoSans-BoldItalic-webfont.eot differ diff --git a/frappe/public/css/font/noto_sans/NotoSans-BoldItalic-webfont.svg b/frappe/public/css/font/noto_sans/NotoSans-BoldItalic-webfont.svg new file mode 100755 index 0000000000..5fb48940d7 --- /dev/null +++ b/frappe/public/css/font/noto_sans/NotoSans-BoldItalic-webfont.svg @@ -0,0 +1,1810 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/frappe/public/css/font/noto_sans/NotoSans-BoldItalic-webfont.ttf b/frappe/public/css/font/noto_sans/NotoSans-BoldItalic-webfont.ttf new file mode 100755 index 0000000000..8d7de909f0 Binary files /dev/null and b/frappe/public/css/font/noto_sans/NotoSans-BoldItalic-webfont.ttf differ diff --git a/frappe/public/css/font/noto_sans/NotoSans-BoldItalic-webfont.woff b/frappe/public/css/font/noto_sans/NotoSans-BoldItalic-webfont.woff new file mode 100755 index 0000000000..e845119faf Binary files /dev/null and b/frappe/public/css/font/noto_sans/NotoSans-BoldItalic-webfont.woff differ diff --git a/frappe/public/css/font/noto_sans/NotoSans-Italic-webfont.eot b/frappe/public/css/font/noto_sans/NotoSans-Italic-webfont.eot new file mode 100755 index 0000000000..7bc2fc80d7 Binary files /dev/null and b/frappe/public/css/font/noto_sans/NotoSans-Italic-webfont.eot differ diff --git a/frappe/public/css/font/noto_sans/NotoSans-Italic-webfont.svg b/frappe/public/css/font/noto_sans/NotoSans-Italic-webfont.svg new file mode 100755 index 0000000000..b2656b64fe --- /dev/null +++ b/frappe/public/css/font/noto_sans/NotoSans-Italic-webfont.svg @@ -0,0 +1,914 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/frappe/public/css/font/noto_sans/NotoSans-Italic-webfont.ttf b/frappe/public/css/font/noto_sans/NotoSans-Italic-webfont.ttf new file mode 100755 index 0000000000..606e808148 Binary files /dev/null and b/frappe/public/css/font/noto_sans/NotoSans-Italic-webfont.ttf differ diff --git a/frappe/public/css/font/noto_sans/NotoSans-Italic-webfont.woff b/frappe/public/css/font/noto_sans/NotoSans-Italic-webfont.woff new file mode 100755 index 0000000000..827c9a4d77 Binary files /dev/null and b/frappe/public/css/font/noto_sans/NotoSans-Italic-webfont.woff differ diff --git a/frappe/public/css/font/noto_sans/NotoSans-Regular-webfont.eot b/frappe/public/css/font/noto_sans/NotoSans-Regular-webfont.eot new file mode 100755 index 0000000000..1749bb7297 Binary files /dev/null and b/frappe/public/css/font/noto_sans/NotoSans-Regular-webfont.eot differ diff --git a/frappe/public/css/font/noto_sans/NotoSans-Regular-webfont.svg b/frappe/public/css/font/noto_sans/NotoSans-Regular-webfont.svg new file mode 100755 index 0000000000..bd7beb4361 --- /dev/null +++ b/frappe/public/css/font/noto_sans/NotoSans-Regular-webfont.svg @@ -0,0 +1,1825 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/frappe/public/css/font/noto_sans/NotoSans-Regular-webfont.ttf b/frappe/public/css/font/noto_sans/NotoSans-Regular-webfont.ttf new file mode 100755 index 0000000000..b4d32efcfa Binary files /dev/null and b/frappe/public/css/font/noto_sans/NotoSans-Regular-webfont.ttf differ diff --git a/frappe/public/css/font/noto_sans/NotoSans-Regular-webfont.woff b/frappe/public/css/font/noto_sans/NotoSans-Regular-webfont.woff new file mode 100755 index 0000000000..ec94d082a0 Binary files /dev/null and b/frappe/public/css/font/noto_sans/NotoSans-Regular-webfont.woff differ diff --git a/frappe/public/css/font/noto_sans/noto_sans.css b/frappe/public/css/font/noto_sans/noto_sans.css new file mode 100644 index 0000000000..6f9cd09376 --- /dev/null +++ b/frappe/public/css/font/noto_sans/noto_sans.css @@ -0,0 +1,51 @@ +@font-face { + font-family: 'Noto Sans'; + src: url('{{ frappe.get_url("/assets/frappe/css/font/noto_sans/NotoSans-Regular-webfont.eot") }}'); + src: local('Noto Sans'), + local('NotoSans'), + url('{{ frappe.get_url("/assets/frappe/css/font/noto_sans/NotoSans-Regular-webfont.eot?#iefix") }}') format('embedded-opentype'), + url('frappe.get_url("/assets/frappe/css/font/noto_sans/NotoSans-Regular-webfont.woff") }}') format('woff'), + url('frappe.get_url("/assets/frappe/css/font/noto_sans/NotoSans-Regular-webfont.ttf") }}') format('truetype'), + url('frappe.get_url("/assets/frappe/css/font/noto_sans/NotoSans-Regular-webfont.svg#noto_sansregular") }}') format('svg'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'Noto Sans'; + src: url('{{ frappe.get_url("/assets/frappe/css/font/noto_sans/NotoSans-Bold-webfont.eot") }}'); + src: local('Noto Sans Bold'), + local('NotoSans-Bold'), + url('{{ frappe.get_url("/assets/frappe/css/font/noto_sans/NotoSans-Bold-webfont.eot?#iefix") }}') format('embedded-opentype'), + url('frappe.get_url("/assets/frappe/css/font/noto_sans/NotoSans-Bold-webfont.woff") }}') format('woff'), + url('frappe.get_url("/assets/frappe/css/font/noto_sans/NotoSans-Bold-webfont.ttf") }}') format('truetype'), + url('frappe.get_url("/assets/frappe/css/font/noto_sans/NotoSans-Bold-webfont.svg#noto_sansbold") }}') format('svg'); + font-weight: bold; + font-style: normal; +} + +@font-face { + font-family: 'Noto Sans'; + src: url('{{ frappe.get_url("/assets/frappe/css/font/noto_sans/NotoSans-Italic-webfont.eot") }}'); + src: local('Noto Sans Bold'), + local('NotoSans-Bold'), + url('{{ frappe.get_url("/assets/frappe/css/font/noto_sans/NotoSans-Italic-webfont.eot?#iefix") }}') format('embedded-opentype'), + url('frappe.get_url("/assets/frappe/css/font/noto_sans/NotoSans-Italic-webfont.woff") }}') format('woff'), + url('frappe.get_url("/assets/frappe/css/font/noto_sans/NotoSans-Italic-webfont.ttf") }}') format('truetype'), + url('frappe.get_url("/assets/frappe/css/font/noto_sans/NotoSans-Italic-webfont.svg#noto_sansitalic") }}') format('svg'); + font-weight: normal; + font-style: italic; +} + +@font-face { + font-family: 'Noto Sans'; + src: url('{{ frappe.get_url("/assets/frappe/css/font/noto_sans/NotoSans-BoldItalic-webfont.eot") }}'); + src: local('Noto Sans Bold'), + local('NotoSans-Bold'), + url('{{ frappe.get_url("/assets/frappe/css/font/noto_sans/NotoSans-BoldItalic-webfont.eot?#iefix") }}') format('embedded-opentype'), + url('frappe.get_url("/assets/frappe/css/font/noto_sans/NotoSans-BoldItalic-webfont.woff") }}') format('woff'), + url('frappe.get_url("/assets/frappe/css/font/noto_sans/NotoSans-BoldItalic-webfont.ttf") }}') format('truetype'), + url('frappe.get_url("/assets/frappe/css/font/noto_sans/NotoSans-BoldItalic-webfont.svg#noto_sansbold_italic") }}') format('svg'); + font-weight: bold; + font-style: italic; +} diff --git a/frappe/public/js/frappe/views/calendar.js b/frappe/public/js/frappe/views/calendar.js index 97b7b8007a..29f8c9d0e1 100644 --- a/frappe/public/js/frappe/views/calendar.js +++ b/frappe/public/js/frappe/views/calendar.js @@ -207,7 +207,7 @@ frappe.views.Calendar = Class.extend({ if(this.field_map.end) { if (args[this.field_map.allDay]) { args[this.field_map.end] = frappe.datetime.get_datetime_as_string(event.start); - } else { + } else if (event.end) { args[this.field_map.end] = frappe.datetime.get_datetime_as_string(event.end); } } diff --git a/frappe/templates/styles/standard.css b/frappe/templates/styles/standard.css index 73edf744db..adbb631d27 100644 --- a/frappe/templates/styles/standard.css +++ b/frappe/templates/styles/standard.css @@ -1,15 +1,4 @@ -@font-face { - font-family: 'Noto Sans'; - font-style: normal; - font-weight: 400; - src: local('Noto Sans'), local('NotoSans'), url({{ frappe.get_url("/assets/frappe/css/font/notosans-400.ttf") }}) format('truetype'); -} -@font-face { - font-family: 'Noto Sans'; - font-style: normal; - font-weight: 700; - src: local('Noto Sans Bold'), local('NotoSans-Bold'), url({{ frappe.get_url("/assets/frappe/css/font/notosans-700.ttf")}}) format('truetype'); -} +{% include "public/css/font/noto_sans/noto_sans.css" %} @media screen { .print-format-gutter { diff --git a/frappe/website/website_generator.py b/frappe/website/website_generator.py index 98fdc70b9d..f29ea0d269 100644 --- a/frappe/website/website_generator.py +++ b/frappe/website/website_generator.py @@ -87,7 +87,7 @@ class WebsiteGenerator(Document): parent).get_route() def update_routes_of_descendants(self, old_route = None): - if not self.is_new(): + if not self.is_new() and self.meta.get_field("parent_website_route"): if not old_route: old_route = frappe.get_doc(self.doctype, self.name).get_route() diff --git a/frappe/widgets/calendar.py b/frappe/widgets/calendar.py index 8cc8c27a3c..17ce524217 100644 --- a/frappe/widgets/calendar.py +++ b/frappe/widgets/calendar.py @@ -13,6 +13,6 @@ def update_event(args, field_map): field_map = frappe._dict(json.loads(field_map)) w = frappe.get_doc(args.doctype, args.name) w.set(field_map.start, args[field_map.start]) - w.set(field_map.end, args[field_map.end]) + w.set(field_map.end, args.get(field_map.end)) w.save() diff --git a/setup.py b/setup.py index 302bf9adb8..6bfd5e31d7 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ from setuptools import setup, find_packages import os -version = "4.10.0" +version = "4.10.1" with open("requirements.txt", "r") as f: install_requires = f.readlines()