You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.4 KiB
Python
68 lines
2.4 KiB
Python
from django.shortcuts import render
|
|
from django.utils.translation import gettext_lazy as _
|
|
from django.http import HttpResponseRedirect
|
|
from django.forms import ModelForm, TextInput, DateInput
|
|
from members.models import Member
|
|
from django.urls import reverse
|
|
from django.utils import timezone
|
|
|
|
|
|
class MemberForm(ModelForm):
|
|
class Meta:
|
|
model = Member
|
|
fields = ['prename', 'lastname', 'street', 'plz', 'town', 'phone_number',
|
|
'phone_number_parents', 'birth_date']
|
|
widgets = {
|
|
'birth_date': DateInput(format='%d.%m.%Y', attrs={'class': 'datepicker'})
|
|
}
|
|
|
|
|
|
def render_echo_failed(request, reason=""):
|
|
context = {}
|
|
if reason:
|
|
context['reason'] = reason
|
|
return render(request, 'members/echo_failed.html', context)
|
|
|
|
|
|
def render_echo(request, key, form):
|
|
return render(request, 'members/echo.html', {'form': form.as_table(),
|
|
'key' : key})
|
|
|
|
|
|
def render_echo_success(request, name):
|
|
return render(request, 'members/echo_success.html', {'name': name})
|
|
|
|
|
|
def echo(request):
|
|
if request.method == 'GET' and 'key' in request.GET:
|
|
try:
|
|
key = request.GET['key']
|
|
member = Member.objects.get(echo_key=key)
|
|
if not member.may_echo(key):
|
|
raise KeyError
|
|
form = MemberForm(instance=member)
|
|
return render_echo(request, key, form)
|
|
except Member.DoesNotExist:
|
|
return render_echo_failed(request, _("invalid"))
|
|
except KeyError:
|
|
return render_echo_failed(request, _("expired"))
|
|
elif request.method == 'POST':
|
|
try:
|
|
key = request.POST['key']
|
|
member = Member.objects.get(echo_key=key)
|
|
if not member.may_echo(key):
|
|
raise KeyError
|
|
form = MemberForm(request.POST, instance=member)
|
|
try:
|
|
form.save()
|
|
member.echo_key, member.echo_expire = "", timezone.now()
|
|
member.echoed = True
|
|
member.save()
|
|
return render_echo_success(request, member.prename)
|
|
except ValueError:
|
|
# when input is invalid
|
|
form = MemberForm(request.POST)
|
|
return render_echo(request, key, form)
|
|
except (Member.DoesNotExist, KeyError):
|
|
return render_echo_failed(request, _("invalid"))
|