|
|
- from django.shortcuts import render
- from django.forms import modelformset_factory
- from django.http import HttpResponse
- from formtools.wizard.views import CookieWizardView
- from django.core.mail import send_mail, BadHeaderError
- from django.conf import settings
- from django.template.loader import get_template
- from django.template import Context
- # from django.contrib.sites.models import Site
-
- from .forms import ProjectForm, VolunteerForm, LibraryForm, IFGForm,\
- HonoraryCertificateForm, InternForm
- from .models import Project, TYPE_CHOICES, Library
- from .settings import URLPREFIX, IF_EMAIL
-
-
- def authorize(request, choice, pk):
- '''If IF grant a support they click a link in a mail which leads here.
- We write the granted field in the database here and set a timestamp.'''
- # TODO: write a timestamp which is needed to determine time of next mail
-
- if choice in ('BIB', 'ELIT', 'SOFT'):
- Library.set_granted(pk,True)
- return HttpResponse(f"AUTHORIZED! choice: {choice}, pk: {pk}")
- else:
- return HttpResponse('ERROR! UNKNWON CHOICE TYPE!')
-
-
- def deny(request, choice, pk):
- '''If IF denies a support they click a link in a mail which leads here
- We write the granted field in the database here.'''
-
- if choice in ('BIB', 'ELIT', 'SOFT'):
- Library.set_granted(pk,False)
- return HttpResponse(f"DENIED! choice: {choice}, pk: {pk}")
- else:
- return HttpResponse('ERROR! UNKNWON CHOICE TYPE!')
-
-
- def project(request):
- # return HttpResponse("Hello, world. You're at the input form")
- # ProjectFormSet = modelformset_factory(Project, fields='__all__')
- if request.method == 'POST':
- print('POST detected')
- form = ProjectForm(request.POST, request.FILES)
- if form.is_valid():
- print('form valid')
- form.save()
-
- # do something.
- else:
- print("form not valid")
- else:
- print
- form = ProjectForm()
- return render(request, 'input/project.html', {'form': form})
-
- def accreditation(request):
- pass
-
- def travel(request):
- pass
-
- def certificate(request):
- pass
-
-
- def done(request):
- return HttpResponse("Your data is save now.")
-
- def extern(request):
- return HttpResponse("The world out there is large and dangerous")
-
- class InternView(CookieWizardView):
- '''This View is for the WMDE-employees only'''
-
- template_name = 'input/extern.html'
- form_list = [InternForm, ProjectForm]
-
- def get_form(self, step=None, data=None, files=None):
- if step is None:
- step = self.steps.current
- print ("get_form() step " + step)
-
- if step == '1':
- prev_data = self.get_cleaned_data_for_step('0')
- choice = prev_data.get('choice')
- if choice == 'HON':
- print ('Ehrenamtsbescheinigung detected!')
- form = HonoraryCertificateForm(data)
- else:
- print('ERROR! UNKNOWN FORMTYPE!')
- else:
- form = super().get_form(step, data, files)
- return form
-
- def done(self, form_list, **kwargs):
- print('ExternView.done() reached')
- # gather data from all forms
- data = {}
- for form in form_list:
- data = {**data, **form.cleaned_data}
- print(data)
-
- # write data to database
- form = form.save(commit=False)
- # we have to copy the data from the first form here
- # this is ugly code. how can we copy this without explicit writing?
- # i found no way to access the ModelForm.Meta.exclude-tupel
- form.realname = data['realname']
- form.username = data['username']
- form.email = data['email']
- form.save()
-
- return done(self.request)
-
-
- class ExternView(CookieWizardView):
- '''This View is for Volunteers'''
-
- template_name = "input/extern.html"
- form_list = [VolunteerForm, LibraryForm]
-
- def get_form(self, step=None, data=None, files=None):
- if step is None:
- step = self.steps.current
- print ("get_form() step " + step)
-
- if step == '1':
- prev_data = self.get_cleaned_data_for_step('0')
- choice = prev_data.get('choice')
- if choice == 'IFG':
- print ('IFG detected!')
- form = IFGForm(data)
- elif choice in ('BIB', 'SOFT', 'ELIT'):
- print ('one of the famous three detected!')
- for (k,v) in TYPE_CHOICES:
- if k == choice:
- break
- form = LibraryForm(data)
- form.fields['library'].label = v
- else:
- print('ERROR! UNKNOWN FORMTYPE!')
- else:
- form = super().get_form(step, data, files)
- return form
-
- def done(self, form_list, **kwargs):
- print('ExternView.done() reached')
- # gather data from all forms
- data = {}
- for form in form_list:
- data = {**data, **form.cleaned_data}
- print(data)
-
- # write data to database
- form = form.save(commit=False)
- # we have to copy the data from the first form here
- # this is ugly code. how can we copy this without explicit writing?
- # i found no way to access the ModelForm.Meta.exclude-tupel
- form.realname = data['realname']
- form.username = data['username']
- form.email = data['email']
- # write type of form in some cases
- if data['choice'] in ('BIB', 'ELIT', 'SOFT'):
- form.type = data['choice']
- form.save()
-
- # add some data to context for mail templates
- data['pk'] = form.pk
- data['urlprefix'] = URLPREFIX
-
- # we need to send the following mails here:
- context = { 'data': data }
- try:
- # - mail with entered data to the Volunteer
- mail_template = get_template('input/ifg_volunteer_mail.txt')
- send_mail(
- 'form filled',
- mail_template.render(context),
- IF_EMAIL,
- [form.email],
- fail_silently=False,
- )
- # - mail to IF with link to accept/decline
- mail_template = get_template('input/if_mail.txt')
- send_mail(
- 'form filled',
- mail_template.render(context),
- IF_EMAIL,
- [IF_EMAIL],
- fail_silently=False,
- )
-
- except BadHeaderError:
- return HttpResponse('Invalid header found.')
-
- return done(self.request)
|