from smtplib import SMTPException from django.views.generic.edit import CreateView from django.urls import reverse from django.http import HttpResponse, HttpResponseRedirect from django.core.mail import send_mail, BadHeaderError from django.template.loader import get_template from formtools.wizard.views import CookieWizardView from django.shortcuts import render from .models import Employee from .forms import PersonalForm, WorkingForm, ITForm, OfficeForm, DummyForm from .settings import MAILS, EVA_MAIL def success(request): return HttpResponse("gut gemacht!") class EvaFormView(CookieWizardView): template_name = 'evapp/employee_form.html' form_list = [PersonalForm, WorkingForm, ITForm, OfficeForm, DummyForm] instance = None data = {} # we need this to display all the data in the last step def get_context_data(self, form, **kwargs): context = super().get_context_data(form=form, **kwargs) context.update({'data': self.get_all_cleaned_data()}) return context #this makes shure, that we use the same model instance for all steps def get_form_instance(self,step): if self.instance == None: self.instance = Employee() return self.instance def done(self, form_list, **kwargs): # form = form_list[0] #.save() print ('INSTANCE_DICT') print(self.instance_dict) # save data to database for form in form_list: form.save() # send data to departments for dep in MAILS: self.send_mail_to_department(dep) return HttpResponseRedirect('success') def send_mail_to_department(self, department): 'send a mail to the given department with the nececcary notifications' print(f'send mail to department {department}...') # TODO: don't send ALL the data context = {'data': self.data} try: mail_template = get_template(f'evapp/{department}_mail.txt') send_mail( 'EVA: Neuzugang', mail_template.render(context), EVA_MAIL, [MAILS[department]['MAIL']], fail_silently=False) except BadHeaderError: self.insatnce.delete() return HttpResponse('Invalid header found. Data not saved!') except SMTPException: self.instance.delete() return HttpResponse('Error in sending mails (propably wrong adress?). Data not saved!')