Merge branch 'master' into develop
This commit is contained in:
commit
80e97a535b
6 changed files with 41 additions and 31 deletions
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
2
frappe/email/email_body.py
Normal file → Executable file
2
frappe/email/email_body.py
Normal file → Executable file
|
|
@ -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"] = '<notification>'
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
]
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<div class="form-documents">
|
||||
<h5 style="margin: 5px 0px;">Related Documents</h5>
|
||||
<h5 style="margin: 5px 0px;">{{__("Related Documents")}}</h5>
|
||||
{% for (var i=0; i < transactions.length; i++) { %}
|
||||
{% if((i % 2)===0) { %}<div class="row">{% } %}
|
||||
<div class="col-xs-6">
|
||||
|
|
@ -18,4 +18,4 @@
|
|||
{% } %}
|
||||
<!-- finally, close one-column row -->
|
||||
{% if((i % 2)===0) { %}</div>{% } %}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue