from datetime import date, timedelta from django.core.management.base import BaseCommand, CommandError from django.template.loader import get_template from django.core.mail import send_mail, BadHeaderError from input.models import Project, Library, HonoraryCertificate from input.settings import URLPREFIX, IF_EMAIL, SURVEYPREFIX class Command(BaseCommand): ''' mails will be send here: - two weeks after confirmation of support for volunteer (/extern) send link with surveylink - TODO: same for HonoraryCertificate (/intern) - TODO: travel: mail 3 weeks after end of project. - assumed end of project (/project) reached: mail to IF, link to project-editpage - TODO: 4 weeks after end of project reached: mail with surveylink ''' help = '''This command sends mail with some links to the database or to the survey after some amount of time.''' def survey_link(self, email, type, pid, name, realname): context = {'realname': realname, 'type': type, 'name': name, 'pid': pid, 'SURVEYPREFIX': SURVEYPREFIX, } mail_template = get_template('input/survey_mail.txt') try: send_mail('Projektende erreicht', mail_template.render(context), IF_EMAIL, [email], fail_silently=False) except BadHeaderError: return HttpResponse('Invalid header found.') print(f'send surveylinkemail to {email}...') def end_of_projects_reached(self): ''' end of project reached ''' # get all projects which ended old = Project.objects.filter(end__lt = date.today())\ .exclude(end_mail_send = True) mail_template = get_template('input/if_end_of_project.txt') for project in old: context = {'project': project} context['URLPREFIX'] = URLPREFIX print(context) try: send_mail('Projektende erreicht', mail_template.render(context), IF_EMAIL, [IF_EMAIL], fail_silently=False) project.end_mail_send = True project.save() except BadHeaderError: self.stdout.write(self.style.ERROR('Invalid header found.')) self.stdout.write(self.style.SUCCESS('end_of_projects_reached() executed.')) def handle(self, *args, **options): self.end_of_projects_reached() # get all library objects which where granted two weeks ago supported = Library.objects.filter(granted=True)\ .filter(granted_date__lt = date.today() - timedelta(days=14))\ .exclude(survey_mail_send=True) print(supported) for item in supported: self.survey_link(email=item.email, type=item.type, pid=9999, ## TODO name=item.library, realname=item.realname) item.survey_mail_send = True item.save() # get all HonoraryCertificate objects which where granted two weeks ago supported = HonoraryCertificate.objects.filter(granted=True)\ .filter(granted_date__lt = date.today() - timedelta(days=14))\ .exclude(survey_mail_send=True) print(supported) for item in supported: self.survey_link(email=item.email, type='HON', pid=9999, ## TODO name=item.request_url, realname=item.realname) item.survey_mail_send = True item.save() self.stdout.write(self.style.SUCCESS('sendmails custom command executed'))