diff --git a/frappe/__init__.py b/frappe/__init__.py index a10eeff2ee..7bc4d958a8 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -13,7 +13,7 @@ import os, sys, importlib, inspect, json from .exceptions import * from .utils.jinja import get_jenv, get_template, render_template -__version__ = '7.2.11' +__version__ = '7.2.12' __title__ = "Frappe Framework" local = Local() diff --git a/frappe/core/doctype/doctype/doctype.py b/frappe/core/doctype/doctype/doctype.py index fc2bb91c57..c972468948 100644 --- a/frappe/core/doctype/doctype/doctype.py +++ b/frappe/core/doctype/doctype/doctype.py @@ -60,7 +60,7 @@ class DocType(Document): self.make_amendable() self.validate_website() if not self.is_new(): - self.update_fields_to_fetch() + self.setup_fields_to_fetch() def check_developer_mode(self): """Throw exception if not developer mode or via patch""" @@ -70,8 +70,8 @@ class DocType(Document): if not frappe.conf.get("developer_mode") and not self.custom: frappe.throw(_("Not in Developer Mode! Set in site_config.json or make 'Custom' DocType.")) - def update_fields_to_fetch(self): - '''Update values for newly set fetch values''' + def setup_fields_to_fetch(self): + '''Setup query to update values for newly set fetch values''' try: old_meta = frappe.get_meta(frappe.get_doc('DocType', self.name), cached=False) old_fields_to_fetch = [df.fieldname for df in old_meta.get_fields_to_fetch()] @@ -80,26 +80,34 @@ class DocType(Document): new_meta = frappe.get_meta(self, cached=False) + self.flags.update_fields_to_fetch_queries = [] + if set(old_fields_to_fetch) != set([df.fieldname for df in new_meta.get_fields_to_fetch()]): for df in new_meta.get_fields_to_fetch(): if df.fieldname not in old_fields_to_fetch: link_fieldname, source_fieldname = df.options.split('.', 1) link_df = new_meta.get_field(link_fieldname) - frappe.db.sql('''update - `tab{link_doctype}` source, - `tab{doctype}` target - set - target.`{fieldname}` = source.`{source_fieldname}` - where - target.`{link_fieldname}` = source.name - and ifnull(target.`{fieldname}`, '')="" '''.format( - link_doctype = link_df.options, - source_fieldname = source_fieldname, - doctype = self.name, - fieldname = df.fieldname, - link_fieldname = link_fieldname - )) + self.flags.update_fields_to_fetch_queries.append('''update + `tab{link_doctype}` source, + `tab{doctype}` target + set + target.`{fieldname}` = source.`{source_fieldname}` + where + target.`{link_fieldname}` = source.name + and ifnull(target.`{fieldname}`, '')="" '''.format( + link_doctype = link_df.options, + source_fieldname = source_fieldname, + doctype = self.name, + fieldname = df.fieldname, + link_fieldname = link_fieldname + )) + + def update_fields_to_fetch(self): + '''Update fetch values based on queries setup''' + if self.flags.update_fields_to_fetch_queries: + for query in self.flags.update_fields_to_fetch_queries: + frappe.db.sql(query) def validate_document_type(self): if self.document_type=="Transaction": @@ -177,6 +185,8 @@ class DocType(Document): self.change_modified_of_parent() make_module_and_roles(self) + self.update_fields_to_fetch() + from frappe import conf if not self.custom and not (frappe.flags.in_import or frappe.flags.in_test) and conf.get('developer_mode'): self.export_doc() diff --git a/frappe/email/email_body.py b/frappe/email/email_body.py old mode 100644 new mode 100755 index 6223470ceb..0d5524b7fa --- a/frappe/email/email_body.py +++ b/frappe/email/email_body.py @@ -185,7 +185,7 @@ class EMail: def set_message_id(self, message_id): if message_id: - self.msg_root["Message-Id"] = message_id + self.msg_root["Message-Id"] = '<' + message_id + '>' else: self.msg_root["Message-Id"] = get_message_id() self.msg_root["References"] = '' diff --git a/frappe/hooks.py b/frappe/hooks.py index 11feb9c0a8..b3585d8754 100755 --- a/frappe/hooks.py +++ b/frappe/hooks.py @@ -143,12 +143,6 @@ scheduler_events = { "frappe.email.doctype.auto_email_report.auto_email_report.send_daily", "frappe.desk.page.backups.backups.delete_downloadable_backups" ], - "daily_long": [ - "frappe.integrations.dropbox_integration.take_backups_daily" - ], - "weekly_long": [ - "frappe.integrations.dropbox_integration.take_backups_weekly" - ], "monthly": [ "frappe.email.doctype.auto_email_report.auto_email_report.send_monthly" ] diff --git a/frappe/integration_broker/doctype/integration_service/test_integration_service.py b/frappe/integration_broker/doctype/integration_service/test_integration_service.py index e9f662e69f..2c01f5981f 100644 --- a/frappe/integration_broker/doctype/integration_service/test_integration_service.py +++ b/frappe/integration_broker/doctype/integration_service/test_integration_service.py @@ -11,10 +11,16 @@ from frappe.utils.scheduler import get_scheduler_events class TestIntegrationService(unittest.TestCase): def test_scheudler_events(self): - dropbox_settings = frappe.get_doc('Dropbox Settings') - dropbox_settings.db_set('enabled', 1) + if not frappe.db.exists("Integration Service", "Dropbox"): + frappe.get_doc({ + "doctype": "Integration Service", + "service": "Dropbox" + }).insert(ignore_permissions=True) + frappe.db.set_value("Integration Service", "Dropbox", "enabled", 1) + frappe.cache().delete_key('scheduler_events') events = get_scheduler_events('daily_long') - self.assertTrue('frappe.integrations.dropbox_integration.take_backups_daily' in events) - dropbox_settings.db_set('enabled', 0) + self.assertTrue('frappe.integrations.doctype.dropbox_settings.dropbox_settings.take_backups_daily' in events) + + frappe.db.set_value("Integration Service", "Dropbox", "enabled", 0) diff --git a/frappe/public/js/frappe/form/templates/form_links.html b/frappe/public/js/frappe/form/templates/form_links.html index b90aef4c2c..c02337b360 100644 --- a/frappe/public/js/frappe/form/templates/form_links.html +++ b/frappe/public/js/frappe/form/templates/form_links.html @@ -1,5 +1,5 @@
-
Related Documents
+
{{__("Related Documents")}}
{% for (var i=0; i < transactions.length; i++) { %} {% if((i % 2)===0) { %}
{% } %}
@@ -18,4 +18,4 @@ {% } %} {% if((i % 2)===0) { %}
{% } %} -
\ No newline at end of file +