diff --git a/frappe/__init__.py b/frappe/__init__.py index d235600458..536e721048 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -310,7 +310,8 @@ def sendmail(recipients=(), sender="", subject="No Subject", message="No Message as_markdown=False, bulk=False, reference_doctype=None, reference_name=None, unsubscribe_method=None, unsubscribe_params=None, unsubscribe_message=None, attachments=None, content=None, doctype=None, name=None, reply_to=None, - cc=(), message_id=None, as_bulk=False, send_after=None, expose_recipients=False): + cc=(), message_id=None, as_bulk=False, send_after=None, expose_recipients=False, + bulk_priority=1): """Send email using user's default **Email Account** or global default **Email Account**. @@ -320,6 +321,7 @@ def sendmail(recipients=(), sender="", subject="No Subject", message="No Message :param message: (or `content`) Email Content. :param as_markdown: Convert content markdown to HTML. :param bulk: Send via scheduled email sender **Bulk Email**. Don't send immediately. + :param bulk_priority: Priority for bulk email, default 1. :param reference_doctype: (or `doctype`) Append as communication to this DocType. :param reference_name: (or `name`) Append as communication to this document name. :param unsubscribe_method: Unsubscribe url with options email, doctype, name. e.g. `/api/method/unsubscribe` @@ -338,7 +340,7 @@ def sendmail(recipients=(), sender="", subject="No Subject", message="No Message reference_doctype = doctype or reference_doctype, reference_name = name or reference_name, unsubscribe_method=unsubscribe_method, unsubscribe_params=unsubscribe_params, unsubscribe_message=unsubscribe_message, attachments=attachments, reply_to=reply_to, cc=cc, message_id=message_id, send_after=send_after, - expose_recipients=expose_recipients) + expose_recipients=expose_recipients, bulk_priority=bulk_priority) else: import frappe.email if as_markdown: diff --git a/frappe/email/bulk.py b/frappe/email/bulk.py index 38aecc35f2..fcf2e9de6a 100644 --- a/frappe/email/bulk.py +++ b/frappe/email/bulk.py @@ -17,7 +17,7 @@ class BulkLimitCrossedError(frappe.ValidationError): pass def send(recipients=None, sender=None, subject=None, message=None, reference_doctype=None, reference_name=None, unsubscribe_method=None, unsubscribe_params=None, unsubscribe_message=None, attachments=None, reply_to=None, cc=(), message_id=None, send_after=None, - expose_recipients=False): + expose_recipients=False, bulk_priority=1): """Add email to sending queue (Bulk Email) :param recipients: List of recipients. @@ -26,6 +26,7 @@ def send(recipients=None, sender=None, subject=None, message=None, reference_doc :param message: Email message. :param reference_doctype: Reference DocType of caller document. :param reference_name: Reference name of caller document. + :param bulk_priority: Priority for bulk email, default 1. :param unsubscribe_method: URL method for unsubscribe. Default is `/api/method/frappe.email.bulk.unsubscribe`. :param unsubscribe_params: additional params for unsubscribed links. default are name, doctype, email :param attachments: Attachments to be sent. @@ -90,15 +91,16 @@ def send(recipients=None, sender=None, subject=None, message=None, reference_doc # add to queue add(email, sender, subject, email_content, email_text_context, reference_doctype, - reference_name, attachments, reply_to, cc, message_id, send_after) + reference_name, attachments, reply_to, cc, message_id, send_after, bulk_priority) def add(email, sender, subject, formatted, text_content=None, reference_doctype=None, reference_name=None, attachments=None, reply_to=None, - cc=(), message_id=None, send_after=None): + cc=(), message_id=None, send_after=None, bulk_priority=1): """add to bulk mail queue""" e = frappe.new_doc('Bulk Email') e.sender = sender e.recipient = email + e.priority = bulk_priority try: mail = get_email(email, sender=e.sender, formatted=formatted, subject=subject, @@ -231,7 +233,7 @@ def flush(from_test=False): for i in xrange(500): email = frappe.db.sql("""select * from `tabBulk Email` where status='Not Sent' and ifnull(send_after, "2000-01-01 00:00:00") < %s - order by creation asc limit 1 for update""", now_datetime(), as_dict=1) + order by priority desc, creation asc limit 1 for update""", now_datetime(), as_dict=1) if email: email = email[0] else: diff --git a/frappe/email/doctype/bulk_email/bulk_email.json b/frappe/email/doctype/bulk_email/bulk_email.json index 57f13fe860..99d2b01a82 100644 --- a/frappe/email/doctype/bulk_email/bulk_email.json +++ b/frappe/email/doctype/bulk_email/bulk_email.json @@ -181,6 +181,29 @@ "search_index": 0, "set_only_once": 0, "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "default": "1", + "fieldname": "priority", + "fieldtype": "Int", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Priority", + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "read_only": 1, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 } ], "hide_heading": 0, @@ -192,7 +215,7 @@ "is_submittable": 0, "issingle": 0, "istable": 0, - "modified": "2015-05-21 07:26:13.627637", + "modified": "2015-09-29 05:16:31.857121", "modified_by": "Administrator", "module": "Email", "name": "Bulk Email", diff --git a/frappe/utils/data.py b/frappe/utils/data.py index e02d874401..07a032908e 100644 --- a/frappe/utils/data.py +++ b/frappe/utils/data.py @@ -203,6 +203,9 @@ def formatdate(string_date=None, format_string=None): return babel.dates.format_date(date, format_string, locale=(frappe.local.lang or "").replace("-", "_")) +def format_time(txt): + return babel.dates.format_time(get_time(txt), locale=(frappe.local.lang or "").replace("-", "_")) + def format_datetime(datetime_string, format_string=None): if not datetime_string: return