Skip to content
Snippets Groups Projects
Commit 2dfcc717 authored by Piotr Gawron's avatar Piotr Gawron
Browse files

cron job for sending weekly emails

parent 237bb003
No related branches found
No related tags found
1 merge request!47Resolve "Email to technician"
Pipeline #
# coding=utf-8 # coding=utf-8
import datetime import datetime
import locale
import platform
import sys
import time
import traceback
import pytz
from django.contrib import messages from django.contrib import messages
from django.utils.dateparse import parse_datetime from django.utils.dateparse import parse_datetime
from django_cron import CronJobBase, Schedule
from django_cron.models import CronJobLog
from notifications import get_filter_locations, get_today_midnight_date from notifications import get_filter_locations, get_today_midnight_date
from web.models import ConfigurationItem from web.models import ConfigurationItem, Language, Worker
from web.models.constants import KIT_EMAIL_HOUR_CONFIGURATION_TYPE, \
KIT_EMAIL_DAY_OF_WEEK_CONFIGURATION_TYPE
from web.models.constants import KIT_RECIPIENT_EMAIL_CONFIGURATION_TYPE from web.models.constants import KIT_RECIPIENT_EMAIL_CONFIGURATION_TYPE
from . import wrap_response from . import wrap_response
from ..smash_email import EmailSender
from ..forms import KitRequestForm from ..forms import KitRequestForm
from ..models import AppointmentType, Appointment from ..models import AppointmentType, Appointment
from ..smash_email import EmailSender
def get_kit_requests(user, start_date=None, end_date=None): def get_kit_requests(user, start_date=None, end_date=None):
...@@ -67,10 +78,9 @@ def kit_requests(request): ...@@ -67,10 +78,9 @@ def kit_requests(request):
return wrap_response(request, 'equipment_and_rooms/kit_requests.html', get_kit_requests_data(request)) return wrap_response(request, 'equipment_and_rooms/kit_requests.html', get_kit_requests_data(request))
def kit_requests_send_mail(request, start_date, end_date=None): def send_mail(data):
data = get_kit_requests_data(request, start_date, end_date)
end_date_str = " end of time" end_date_str = " end of time"
if end_date is not None: if data["end_date"] is not None:
end_date_str = data["end_date"].strftime('%Y-%m-%d') end_date_str = data["end_date"].strftime('%Y-%m-%d')
title = "Kits required between " + data["start_date"].strftime('%Y-%m-%d') + " and " + end_date_str title = "Kits required between " + data["start_date"].strftime('%Y-%m-%d') + " and " + end_date_str
...@@ -101,14 +111,58 @@ def kit_requests_send_mail(request, start_date, end_date=None): ...@@ -101,14 +111,58 @@ def kit_requests_send_mail(request, start_date, end_date=None):
email_body += "</tr>" email_body += "</tr>"
email_body += "</tbody></table>" email_body += "</tbody></table>"
recipients = ConfigurationItem.objects.get(type=KIT_RECIPIENT_EMAIL_CONFIGURATION_TYPE).value recipients = ConfigurationItem.objects.get(type=KIT_RECIPIENT_EMAIL_CONFIGURATION_TYPE).value
sender = request.user.email
cc_recipients = [] cc_recipients = []
if sender is not None: EmailSender().send_email(title, email_body, recipients, cc_recipients)
cc_recipients.append(sender)
def kit_requests_send_mail(request, start_date, end_date=None):
data = get_kit_requests_data(request, start_date, end_date)
try: try:
print email_body send_mail(data)
EmailSender().send_email(title, email_body, recipients, cc_recipients)
messages.add_message(request, messages.SUCCESS, 'Mail sent') messages.add_message(request, messages.SUCCESS, 'Mail sent')
except: except:
messages.add_message(request, messages.ERROR, 'There was problem with sending email') messages.add_message(request, messages.ERROR, 'There was problem with sending email')
return wrap_response(request, 'equipment_and_rooms/kit_requests.html', get_kit_requests_data(request)) return wrap_response(request, 'equipment_and_rooms/kit_requests.html', get_kit_requests_data(request))
class KitRequestEmailSendJob(CronJobBase):
RUN_EVERY_MINS = 1
schedule = Schedule(run_every_mins=RUN_EVERY_MINS)
code = 'web.kit_request_weekly_email' # a unique code
def do(self):
now = datetime.datetime.utcnow()
hour = int(ConfigurationItem.objects.get(
type=KIT_EMAIL_HOUR_CONFIGURATION_TYPE).value.split(":")[0])
minute = int(ConfigurationItem.objects.get(
type=KIT_EMAIL_HOUR_CONFIGURATION_TYPE).value.split(":")[1])
# check if we sent email this day already
date = pytz.utc.localize(now.replace(hour=hour, minute=minute))
date = date + (datetime.datetime.utcnow() - datetime.datetime.now())
jobs = CronJobLog.objects.filter(code=KitRequestEmailSendJob.code, message="mail sent", start_time__gte=date)
if jobs.count() == 0:
if self.match_day_of_week():
data = get_kit_requests(Worker.objects.create());
send_mail(data);
return "mail sent"
else:
return False
else:
return False
def match_day_of_week(self):
user_day_of_week = ConfigurationItem.objects.get(type=KIT_EMAIL_DAY_OF_WEEK_CONFIGURATION_TYPE).value
language = Language.objects.get(name="English");
locale_name = language.locale
if platform.system() == 'Windows':
locale_name = language.windows_locale_name
try:
locale.setlocale(locale.LC_TIME, locale_name)
except:
traceback.print_exc(file=sys.stdout)
user_day_of_week_int = int(time.strptime(user_day_of_week, '%A').tm_wday) + 1
current_day_of_week_int = int(datetime.datetime.now().strftime("%w"));
return user_day_of_week_int == current_day_of_week_int
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment