diff --git a/erpnext/setup/doctype/email_digest/email_digest.py b/erpnext/setup/doctype/email_digest/email_digest.py index 9c395c3a557..35dcf5ba63a 100644 --- a/erpnext/setup/doctype/email_digest/email_digest.py +++ b/erpnext/setup/doctype/email_digest/email_digest.py @@ -378,8 +378,43 @@ class DocType: webnotes.msgprint('There was a problem in sending your email. Please contact support@erpnext.com') #webnotes.errprint(webnotes.getTraceback()) + + def on_update(self): + """ + + """ + import webnotes + args = { + 'db_name': webnotes.conn.get_value('Control Panel', '', 'account_id'), + 'event': 'setup.doctype.email_digest.email_digest.send' + } + from webnotes.utils.scheduler import Scheduler + sch = Scheduler() + sch.connect() + + if self.doc.enabled == 1: + # Create scheduler entry + res = sch.conn.sql(""" + SELECT * FROM Event + WHERE + db_name = %(db_name)s AND + event = %(event)s + """, args) + + if not (res and res[0]): + args['next_execution'] = self.get_next_execution() + + sch.conn.sql(""" + INSERT INTO Event (db_name, event, `interval`, next_execution, recurring) + VALUES (%(db_name)s, %(event)s, 86400, %(next_execution)s, 1) + """, args) + + else: + # delete scheduler entry + sch.clear(args['db_name'], args['event']) - def schedule(self): + + def get_next_sending(self): """ """ @@ -387,7 +422,65 @@ class DocType: # Get System TimeZone import time from pytz import timezone - server_tz = timezone(time.tzname[0]) + import datetime + import webnotes.defs cp = webnotes.model.doc.Document('Control Panel','Control Panel') app_tz = timezone(cp.time_zone) + server_tz = timezone(getattr(webnotes.defs, 'system_timezone')) + + start_date, end_date = self.get_start_end_dates() + + new_date = end_date + datetime.timedelta(days=1) + new_time = datetime.time(hour=6) + + naive_dt = datetime.datetime.combine(new_date, new_time) + app_dt = app_tz.localize(naive_dt) + server_dt = server_tz.normalize(app_dt.astimezone(server_tz)) + + res = { + 'app_dt': app_dt.replace(tzinfo=None), + 'app_tz': app_tz, + 'server_dt': server_dt.replace(tzinfo=None), + 'server_tz': server_tz + } + + from webnotes.utils import formatdate + str_date = formatdate(str(res['app_dt'].date())) + str_time = res['app_dt'].time().strftime('%I:%M') + + self.doc.next_send = str_date + " at " + str_time + + return res + + + def get_next_execution(self): + """ + + """ + from datetime import datetime, timedelta + dt_args = self.get_next_sending() + server_dt = dt_args['server_dt'] + now_dt = datetime.now(dt_args['server_tz']) + if now_dt.time() <= server_dt.time(): + next_date = now_dt.date() + else: + next_date = now_dt.date() + timedelta(days=1) + + next_time = server_dt.time() + + return datetime.combine(next_date, next_time) + + + def onload(self): + """ + + """ + self.get_next_sending() + + +def send(): + """ + + """ + pass diff --git a/erpnext/setup/doctype/email_digest/email_digest.txt b/erpnext/setup/doctype/email_digest/email_digest.txt index 34822ed74b6..af50c744072 100644 --- a/erpnext/setup/doctype/email_digest/email_digest.txt +++ b/erpnext/setup/doctype/email_digest/email_digest.txt @@ -5,14 +5,14 @@ { 'creation': '2011-11-28 13:11:56', 'docstatus': 0, - 'modified': '2011-12-05 18:54:27', + 'modified': '2011-12-06 18:49:23', 'modified_by': 'Administrator', 'owner': 'Administrator' }, # These values are common for all DocType { - '_last_update': '1323083188', + '_last_update': '1323177411', 'autoname': 'Prompt', 'colour': 'White:FFF', 'doctype': 'DocType', @@ -21,7 +21,7 @@ 'name': '__common__', 'section_style': 'Simple', 'show_in_menu': 0, - 'version': 61 + 'version': 66 }, # These values are common for all DocField @@ -114,8 +114,8 @@ # DocField { 'doctype': 'DocField', - 'fieldname': 'next_send_datetime', - 'fieldtype': 'Text', + 'fieldname': 'next_send', + 'fieldtype': 'Data', 'label': 'Next email will be sent on:', 'permlevel': 1 },