fix: update newsletter status on sending

sets email_sent, schedule_send, and scheduled_to_send on newsletter
being sent

also switch to raw sql query to avoid default set by coalesce

Signed-off-by: Chinmay D. Pai <chinmaydpai@gmail.com>
This commit is contained in:
Chinmay D. Pai 2020-04-06 19:02:30 +05:30
parent 446c0636ac
commit ed9fd709ad
No known key found for this signature in database
GPG key ID: 75507BE256F40CED

View file

@ -51,9 +51,6 @@ class Newsletter(WebsiteGenerator):
frappe.msgprint(_("Scheduled to send to {0} recipients").format(len(self.recipients)))
frappe.db.set(self, "email_sent", 1)
frappe.db.set(self, "schedule_send", now_datetime())
frappe.db.set(self, 'scheduled_to_send', len(self.recipients))
else:
frappe.msgprint(_("Newsletter should have atleast one recipient"))
@ -217,6 +214,9 @@ def send_newsletter(newsletter):
try:
doc = frappe.get_doc("Newsletter", newsletter)
doc.queue_all()
doc.db_set("email_sent", 1)
doc.db_set("schedule_send", now_datetime())
doc.db_set("scheduled_to_send", len(self.recipients))
except:
frappe.db.rollback()
@ -265,9 +265,10 @@ def get_newsletter_list(doctype, txt, filters, limit_start, limit_page_length=20
def send_scheduled_email():
"""Send scheduled newsletter to the recipients."""
scheduled_newsletter = frappe.get_all('Newsletter', filters = {
'schedule_send': ('<=', now_datetime()),
'email_sent': 0
}, fields = ['name'])
scheduled_newsletter = frappe.db.sql("""
SELECT name from `tabNewsletter`
WHERE schedule_send <= %s
AND email_sent = 0
""", now_datetime(), as_dict=1)
for newsletter in scheduled_newsletter:
send_newsletter(newsletter.name)
send_newsletter(newsletter.name)