diff --git a/frappe/__init__.py b/frappe/__init__.py index 11378a1fa5..e2b1256b08 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -327,7 +327,8 @@ def reset_perms(doctype): def generate_hash(txt=None): """Generates random hash for session id""" import hashlib, time - return hashlib.sha224((txt or "") + repr(time.time())).hexdigest() + from .utils import random_string + return hashlib.sha224((txt or "") + repr(time.time()) + repr(random_string(8))).hexdigest() def reset_metadata_version(): v = generate_hash() diff --git a/frappe/core/doctype/email_alert/email_alert.js b/frappe/core/doctype/email_alert/email_alert.js index 7a44608464..9bad01d3b3 100644 --- a/frappe/core/doctype/email_alert/email_alert.js +++ b/frappe/core/doctype/email_alert/email_alert.js @@ -6,26 +6,27 @@ frappe.email_alert = { } frappe.model.with_doctype(frm.doc.document_type, function() { + var get_select_options = function(df) { + return {value: df.fieldname, label: df.fieldname + " (" + __(df.label) + ")"}; + } var fields = frappe.get_doc("DocType", frm.doc.document_type).fields; var options = $.map(fields, function(d) { return in_list(frappe.model.no_value_type, d.fieldtype) ? - null : d.fieldname; }); - - options = options.join("\n"); + null : get_select_options(d); }); // set value changed options - frm.set_df_property("value_changed", "options", "\n" + options); + frm.set_df_property("value_changed", "options", [""].concat(options)); // set date changed options frm.set_df_property("date_changed", "options", $.map(fields, function(d) { return (d.fieldtype=="Date" || d.fieldtype=="Datetime") ? - d.fieldname : null; })); + get_select_options(d) : null; })); // set email recipient options frappe.meta.get_docfield("Email Alert Recipient", "email_by_document_field", - frm.doc.name).options = "\nowner\n" + options; + frm.doc.name).options = ["owner"].concat(options); }); } diff --git a/frappe/core/doctype/email_alert/email_alert.json b/frappe/core/doctype/email_alert/email_alert.json index 14a171d755..9d06dd4ced 100644 --- a/frappe/core/doctype/email_alert/email_alert.json +++ b/frappe/core/doctype/email_alert/email_alert.json @@ -1,10 +1,17 @@ { - "autoname": "field:subject", + "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", + "permlevel": 0 + }, { "fieldname": "filters", "fieldtype": "Section Break", @@ -120,7 +127,7 @@ } ], "icon": "icon-envelope", - "modified": "2014-07-14 15:33:46.806944", + "modified": "2014-07-15 05:07:14.002351", "modified_by": "Administrator", "module": "Core", "name": "Email Alert", @@ -140,5 +147,6 @@ } ], "sort_field": "modified", - "sort_order": "DESC" + "sort_order": "DESC", + "title_field": "subject" } \ No newline at end of file diff --git a/frappe/core/doctype/email_alert/email_alert.py b/frappe/core/doctype/email_alert/email_alert.py index d3c038f375..941fe770e1 100644 --- a/frappe/core/doctype/email_alert/email_alert.py +++ b/frappe/core/doctype/email_alert/email_alert.py @@ -15,13 +15,21 @@ class EmailAlert(Document): if self.event=="Value Change" and not self.value_changed: frappe.throw(_("Please specify which value field must be checked")) + forbidden_document_types = ("Bulk Email",) + if self.document_type in forbidden_document_types: + frappe.throw(_("Cannot set Email Alert on Document Type {0}").format(self.document_type)) + def trigger_daily_alerts(): trigger_email_alerts(None, "Date Change") def trigger_email_alerts(doc, method=None): + if frappe.flags.in_import or frappe.flags.in_patch: + # don't send email alerts while syncing or patching + return + if method=="Date Change": for alert in frappe.db.sql_list("""select name from `tabEmail Alert` - where event='Date Change'"""): + where event='Date Change' and enabled=1"""): alert = frappe.get_doc("Email Alert", alert) @@ -46,7 +54,7 @@ def trigger_email_alerts(doc, method=None): }[method] for alert in frappe.db.sql_list("""select name from `tabEmail Alert` - where document_type=%s and event=%s""", (doc.doctype, eevent)): + where document_type=%s and event=%s and enabled=1""", (doc.doctype, eevent)): evaluate_alert(doc, alert, eevent) def evaluate_alert(doc, alert, event): @@ -86,7 +94,7 @@ def evaluate_alert(doc, alert, event): footer = """