diff --git a/frappe/email/doctype/newsletter/newsletter.js b/frappe/email/doctype/newsletter/newsletter.js index 8e58b562e7..0fcec25402 100644 --- a/frappe/email/doctype/newsletter/newsletter.js +++ b/frappe/email/doctype/newsletter/newsletter.js @@ -21,9 +21,10 @@ cur_frm.cscript.refresh = function(doc) { } cur_frm.cscript.setup_dashboard = function() { - if(!cur_frm.doc.__islocal && cint(cur_frm.doc.email_sent) && cur_frm.doc.__onload && cur_frm.doc.__onload.status_count) { + if(!cur_frm.doc.__islocal && cint(cur_frm.doc.email_sent) + && cur_frm.doc.__onload && cur_frm.doc.__onload.status_count) { var stat = cur_frm.doc.__onload.status_count; - var total = frappe.utils.sum($.map(stat, function(v) { return v; })); + var total = cur_frm.doc.scheduled_to_send; if(total) { $.each(stat, function(k, v) { stat[k] = flt(v * 100 / total, 2) + '%'; @@ -31,12 +32,17 @@ cur_frm.cscript.setup_dashboard = function() { cur_frm.dashboard.add_progress("Status", [ { - title: stat["Sent"] + "% Sent", + title: stat["Not Sent"] + " Queued", + width: stat["Not Sent"], + progress_class: "progress-bar-info" + }, + { + title: stat["Sent"] + " Sent", width: stat["Sent"], progress_class: "progress-bar-success" }, { - title: stat["Sending"] + "% Sending", + title: stat["Sending"] + " Sending", width: stat["Sending"], progress_class: "progress-bar-warning" }, diff --git a/frappe/email/doctype/newsletter/newsletter.json b/frappe/email/doctype/newsletter/newsletter.json index 4a1fed3e07..bc1859744f 100644 --- a/frappe/email/doctype/newsletter/newsletter.json +++ b/frappe/email/doctype/newsletter/newsletter.json @@ -124,6 +124,34 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "scheduled_to_send", + "fieldtype": "Int", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Scheduled To Send", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 0, "bold": 0, @@ -275,7 +303,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2016-12-29 14:40:10.027720", + "modified": "2017-01-19 06:16:23.102086", "modified_by": "Administrator", "module": "Email", "name": "Newsletter", @@ -285,13 +313,12 @@ "amend": 0, "apply_user_permissions": 0, "cancel": 0, - "create": 0, + "create": 1, "delete": 1, "email": 1, "export": 1, "if_owner": 0, "import": 0, - "is_custom": 0, "permlevel": 0, "print": 1, "read": 1, diff --git a/frappe/email/doctype/newsletter/newsletter.py b/frappe/email/doctype/newsletter/newsletter.py index 1ed3909afc..63efe9a66d 100755 --- a/frappe/email/doctype/newsletter/newsletter.py +++ b/frappe/email/doctype/newsletter/newsletter.py @@ -40,7 +40,7 @@ class Newsletter(Document): self.validate_send() # using default queue with a longer timeout as this isn't a scheduled task - enqueue(send_newsletter, queue='default', timeout=5000, event='send_newsletter', + enqueue(send_newsletter, queue='default', timeout=6000, event='send_newsletter', newsletter=self.name) else: @@ -49,6 +49,7 @@ class Newsletter(Document): frappe.msgprint(_("Scheduled to send to {0} recipients").format(len(self.recipients))) frappe.db.set(self, "email_sent", 1) + frappe.db.set(self, 'scheduled_to_send', len(self.recipients)) def queue_all(self): if not self.get("recipients"): diff --git a/frappe/email/queue.py b/frappe/email/queue.py index e8ba5ad3eb..de5630695c 100755 --- a/frappe/email/queue.py +++ b/frappe/email/queue.py @@ -125,6 +125,8 @@ def add(recipients, sender, subject, **kwargs): if kwargs.get('now'): send_one(duplicate.name, now=True) + + frappe.db.commit() else: email_queue = get_email_queue(recipients, sender, subject, **kwargs) if kwargs.get('now'): @@ -298,9 +300,15 @@ def make_cache_queue(): '''cache values in queue before sendign''' cache = frappe.cache() - emails = frappe.db.sql('''select name from `tabEmail Queue` - where (status='Not Sent' or status='Partially Sent') and (send_after is null or send_after < %(now)s) - order by priority desc, creation asc + emails = frappe.db.sql('''select + name + from + `tabEmail Queue` + where + (status='Not Sent' or status='Partially Sent') and + (send_after is null or send_after < %(now)s) + order + by priority desc, creation asc limit 500''', { 'now': now_datetime() }) # reset value @@ -311,9 +319,15 @@ def make_cache_queue(): def send_one(email, smtpserver=None, auto_commit=True, now=False, from_test=False): '''Send Email Queue with given smtpserver''' - email = frappe.db.sql('''select name, status, communication, - message, sender, reference_doctype, reference_name, unsubscribe_param, unsubscribe_method, expose_recipients, show_as_cc - from `tabEmail Queue` where name=%s for update''', email, as_dict=True)[0] + email = frappe.db.sql('''select + name, status, communication, message, sender, reference_doctype, + reference_name, unsubscribe_param, unsubscribe_method, expose_recipients, + show_as_cc + from + `tabEmail Queue` + where + name=%s + for update''', email, as_dict=True)[0] recipients_list = frappe.db.sql('''select name, recipient, status from `tabEmail Queue Recipient` where parent=%s''',email.name,as_dict=1)