Fix multiple form and table issues
This commit is contained in:
+6
-8
@@ -30,14 +30,6 @@ class MemberForm(forms.ModelForm):
|
||||
self.members = members
|
||||
self.payments = payments
|
||||
|
||||
def clean_email(self):
|
||||
email = self.cleaned_data['email']
|
||||
|
||||
if Member.objects.filter(email=email).exists():
|
||||
raise forms.ValidationError('Member with email "{}" already exists.'.format(email), code='exists')
|
||||
|
||||
return email
|
||||
|
||||
def _clean_boolean_field(self, key):
|
||||
value = self.data.get(key, None)
|
||||
if value in ['1', '0']:
|
||||
@@ -124,3 +116,9 @@ class ApplicationForm(forms.ModelForm):
|
||||
|
||||
model = Request
|
||||
fields = ['first_name', 'last_name', 'email', 'AYY', 'jas', 'POR']
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(ApplicationForm, self).__init__(*args, **kwargs)
|
||||
|
||||
self.fields['AYY'].label = _("I'm a member of AYY")
|
||||
self.fields['jas'].label = _("I want to receive a weekly newsletter")
|
||||
@@ -100,6 +100,8 @@ class Member(BaseMember):
|
||||
('check_by_email', 'Can check if user exists by email'),
|
||||
('read_member', 'Can see member in list'),
|
||||
)
|
||||
verbose_name = _('Member')
|
||||
verbose_name_plural = _('Members')
|
||||
|
||||
def last_paid(self):
|
||||
"""Return member's last payment."""
|
||||
|
||||
+3
-3
@@ -17,7 +17,7 @@ class MemberTable(tables.Table):
|
||||
'href="/members/edit/{{ record.id }}">') +
|
||||
_('Edit') +
|
||||
'</a>',
|
||||
verbose_name=_('Options')
|
||||
verbose_name=""
|
||||
)
|
||||
|
||||
class Meta:
|
||||
@@ -36,7 +36,7 @@ class PaymentTable(tables.Table):
|
||||
'href="/members/edit_payment/{{ record.id }}">') +
|
||||
_('Edit') +
|
||||
'</a>',
|
||||
verbose_name=_('Options')
|
||||
verbose_name=""
|
||||
)
|
||||
|
||||
class Meta:
|
||||
@@ -53,7 +53,7 @@ class RequestTable(tables.Table):
|
||||
'href="/members/edit_application/{{ record.id }}">') +
|
||||
_('Edit') +
|
||||
'</a>',
|
||||
verbose_name=_('Options')
|
||||
verbose_name=""
|
||||
)
|
||||
|
||||
class Meta:
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
{% extends "members_base.html" %}
|
||||
|
||||
{% load i18n %}
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block content %}
|
||||
<div>
|
||||
<div>
|
||||
<h3>{% trans "Are you sure you want to delete this application?" %}</h3>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<table class="table readonly" >
|
||||
{{ form }}
|
||||
</table>
|
||||
<form name="applicationForm" action="/members/delete_application" method="post" class="form">{% csrf_token %}
|
||||
<input type="hidden" name="id" value="{{ application_id }}">
|
||||
<button type="submit" class="btn btn-danger">
|
||||
{% trans "Yes, I'm sure" %}
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock content %}
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
<div id="input_form">
|
||||
<form name="applicationForm" action="/members/accept_application" method="post" class="form">{% csrf_token %}
|
||||
<input type="hidden" name="id" value="{{ application_id }}">
|
||||
<input type="hidden" name="id" value="{{ application_id }}">
|
||||
{% bootstrap_form form %}
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-primary">
|
||||
|
||||
@@ -1,67 +1,21 @@
|
||||
{% extends "application_form_base.html" %}
|
||||
{% load static %}
|
||||
{% load bootstrap3 %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block content %}
|
||||
<link rel="stylesheet" href="{% static "css/application.css" %}">
|
||||
|
||||
<div id="input_form" ng-controller="applicationController">
|
||||
<form name="applicationForm">
|
||||
<div class="col-xs-12">
|
||||
<h3>Killan jäseneksi liittyminen on helppoa ja hauskaa!</h3>
|
||||
<h3>Täytä vain alla oleva lomake</h3>
|
||||
<h4>Muista myös maksaa jäsenmaksusi!</h4>
|
||||
</div>
|
||||
<div class="col-xs-10 col-xs-offset-1">
|
||||
<div class="form-group">
|
||||
<label for="firstNameField">Etunimi: </label>
|
||||
<input id="firstNameField" required type="text" placeholder="Sähkö" class="form-control" ng-model="member.first_name"></input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-10 col-xs-offset-1">
|
||||
<div class="form-group">
|
||||
<label for="lastNameField">Sukunimi: </label>
|
||||
<input id="lastNameField" required type="text" placeholder="Insinööri" class="form-control" ng-model="member.last_name"></input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-10 col-xs-offset-1">
|
||||
<div class="form-group">
|
||||
<label for="emailField">Sähköposti: </label>
|
||||
<input id="emailField" required type="text" placeholder="sahko.insinoori@aalto.fi" class="form-control" ng-model="member.email"></input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-10 col-xs-offset-1">
|
||||
<div class="form-group">
|
||||
<label>Olen AYY:n jäsen: </label>
|
||||
<input type="checkbox" autocomplete="off" id="AYY" value="0" ng-model="member.AYY">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-10 col-xs-offset-1">
|
||||
<div class="form-group">
|
||||
<label>Haluan saada viikottaisia jäsenmaileja: </label>
|
||||
<input type="checkbox" class="custom-control-input" autocomplete="off" id="JAS" value="0" ng-model="member.jas">
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-10 col-xs-offset-1">
|
||||
<div class="form-group">
|
||||
<label>Asuinkunta: </label>
|
||||
<input id="PORField" required type="text" placeholder="Otaniemi" class="form-control" ng-model="member.POR"></input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-10 col-xs-offset-1">
|
||||
<div
|
||||
id="captcha"
|
||||
vc-recaptcha
|
||||
theme="'light'"
|
||||
key="'6LevHAcUAAAAAA45B7c-7qja-2aSwHztr9xb4K2Z'"
|
||||
on-create="setWidgetId(widgetId)"
|
||||
on-success="setResponse(response)"
|
||||
on-expire="cbExpiration()"
|
||||
></div>
|
||||
</div>
|
||||
<div class="col-xs-10 col-xs-offset-1">
|
||||
<button ng-click="applicationForm.$valid && send()" type="submit" class="btn btn-success" id="sendmember">Liity</button>
|
||||
</div>
|
||||
<h3>{% trans "Killan jäseneksi liittyminen on helppoa ja hauskaa!" %}</h3>
|
||||
<h3>{% trans "Täytä vain alla oleva lomake" %}</h3>
|
||||
<h4>{% trans "Muista myös maksaa jäsenmaksusi!" %}</h4>
|
||||
<div class="form">
|
||||
<form method="POST" action="/members/submit_application">{% csrf_token %}
|
||||
{% bootstrap_form form %}
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-primary">
|
||||
{% trans "Send" %}
|
||||
</button>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
</div>
|
||||
{% endblock content %}
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
{% extends "application_form_base.html" %}
|
||||
{% load static %}
|
||||
{% load bootstrap3 %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Hienoa! Jäsenhakemuksesi on nyt lähetetty.</h1>
|
||||
<a href="https://sahkoinsinoorikilta.fi">Takaisin Sähköinsinöörikillan web-sivuille</a>
|
||||
<link rel="stylesheet" href="{% static "css/application.css" %}">
|
||||
<h3>{% trans "Hienoa! Jäsenhakemuksesi on nyt lähetetty." %}</h3>
|
||||
<a href="/"><h4>{% trans "Takaisin Sähköinsinöörikillan web-sivuille" %}</h4></a>
|
||||
{% endblock content %}
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
{% extends "members_base.html" %}
|
||||
|
||||
{% load static %}
|
||||
{% load i18n %}
|
||||
{% block content %}
|
||||
<div>
|
||||
<div>
|
||||
<h3>{% trans "Error" %}</h3>
|
||||
</div>
|
||||
|
||||
<div class="alert alert-danger">
|
||||
{{ error|safe }}
|
||||
</div>
|
||||
<div>
|
||||
<button onclick="window.history.back();" class="btn btn-primary">{% trans "Back" %}</button>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock content %}
|
||||
+2
-4
@@ -32,7 +32,7 @@ from rest_framework.authtoken import views
|
||||
from members.views import application_form
|
||||
from members.views import application_list
|
||||
from members.views import application_edit
|
||||
from members.views import application_form_success
|
||||
from members.views import application_submit
|
||||
|
||||
# email validation
|
||||
# from members.views import validateEmail, validate_success, validate_fail
|
||||
@@ -76,15 +76,13 @@ urlpatterns = [
|
||||
url(r'^submit_payment$', payment_submit),
|
||||
url(r'^update_payment$', payment_update),
|
||||
url(r'^delete_payment$', payment_delete),
|
||||
url(r'^submit_application$', application_submit),
|
||||
url(r'^accept_application$', application_accept),
|
||||
url(r'^delete_application$', application_delete),
|
||||
|
||||
# the actual member application form
|
||||
url(r'^application/$', application_form),
|
||||
|
||||
# success page for the application
|
||||
url(r'^application/success$', application_form_success),
|
||||
|
||||
# delete confirmation view for applications
|
||||
url(r'^delete_application_confirm/(?P<index>\d+)$',
|
||||
application_delete_confirm),
|
||||
|
||||
@@ -64,27 +64,46 @@ def application_edit(request, *args, **kwargs):
|
||||
@permission_required('members.add_member', raise_exception=True)
|
||||
def application_accept(request, *args, **kwargs):
|
||||
"""Accept application."""
|
||||
form = ApplicationForm(request.POST)
|
||||
if form.is_valid():
|
||||
id = request.POST['id']
|
||||
id = request.POST.get('id', None)
|
||||
if id is not None:
|
||||
application = Request.objects.get(id=id)
|
||||
|
||||
member = application.to_member()
|
||||
member.save()
|
||||
application.delete()
|
||||
|
||||
logging.info(
|
||||
"Accepted application in member "
|
||||
"register with the following info: {}"
|
||||
.format(form))
|
||||
notification = "{} {}.".format(_("Successfully accepted application"),
|
||||
str(application))
|
||||
return HttpResponseRedirect(
|
||||
'/members/list?notification={}'.format(html.escape(notification)))
|
||||
else:
|
||||
return render(request,
|
||||
'error.html',
|
||||
{'error': _("Application missing 'id' field.")})
|
||||
|
||||
form = ApplicationForm(request.POST, instance=application)
|
||||
if form.is_valid():
|
||||
try:
|
||||
application = form.save()
|
||||
|
||||
if Member.objects.filter(email=application.email).exists():
|
||||
return render(request,
|
||||
'error.html',
|
||||
{'error': _('Email {} is already in use by a member. Application cannot be accepted.').format(application.email)})
|
||||
|
||||
member = application.to_member()
|
||||
member.save()
|
||||
application.delete()
|
||||
|
||||
logging.info(
|
||||
"Accepted application in member "
|
||||
"register with the following info: {}"
|
||||
.format(form))
|
||||
notification = "{} {}.".format(_("Successfully accepted application"),
|
||||
str(application))
|
||||
return HttpResponseRedirect(
|
||||
'/members/list?notification={}'.format(html.escape(notification)))
|
||||
except Exception as ex:
|
||||
logging.exception('Exception while accepting application')
|
||||
return render(request,
|
||||
'error.html',
|
||||
{'error': str(ex)})
|
||||
else:
|
||||
logging.info(form)
|
||||
return render(request,
|
||||
'error.html',
|
||||
{'error': _('Could not accept application object')})
|
||||
{'error': form.errors})
|
||||
|
||||
|
||||
@ensure_csrf_cookie
|
||||
@@ -106,7 +125,7 @@ def application_delete(request, *args, **kwargs):
|
||||
application.delete()
|
||||
logging.info(
|
||||
"Delete application in member register with the following id: {}"
|
||||
.format(id))
|
||||
.format(id))
|
||||
return HttpResponseRedirect(
|
||||
'/members/applications?notification={}'
|
||||
.format(html.escape(notification)))
|
||||
@@ -138,10 +157,21 @@ def application_delete_confirm(request, *args, **kwargs):
|
||||
@ensure_csrf_cookie
|
||||
def application_form(request, *args, **kwargs):
|
||||
"""Render member application form."""
|
||||
return render(request, 'application_index.html', {})
|
||||
form = ApplicationForm()
|
||||
return render(request, 'application_index.html', {'form': form})
|
||||
|
||||
|
||||
@ensure_csrf_cookie
|
||||
def application_form_success(request, *args, **kwargs):
|
||||
"""Render application Successfully sent page."""
|
||||
return render(request, 'application_success.html', {})
|
||||
@require_http_methods(["POST"])
|
||||
@login_required(login_url='/login')
|
||||
@permission_required('members.delete_request', raise_exception=True)
|
||||
def application_submit(request, *args, **kwargs):
|
||||
"""Submit member application"""
|
||||
form = ApplicationForm(request.POST)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
return render(request, 'application_success.html', {})
|
||||
else:
|
||||
return render(request,
|
||||
'error.html',
|
||||
{'error': form.errors})
|
||||
|
||||
@@ -138,11 +138,18 @@ def member_submit(request, *args, **kwargs):
|
||||
@permission_required('members.change_member', raise_exception=True)
|
||||
def member_update(request, *args, **kwargs):
|
||||
"""Update member information."""
|
||||
form = MemberForm(request.POST)
|
||||
if form.is_valid():
|
||||
id = request.POST['id']
|
||||
id = request.POST.get('id', None)
|
||||
logging.debug(id)
|
||||
if id is not None:
|
||||
member = Member.objects.get(id=id)
|
||||
form = MemberForm(request.POST, instance=member)
|
||||
else:
|
||||
return render(request,
|
||||
'error.html',
|
||||
{'error': _("Member missing 'id' field.")})
|
||||
logging.debug(member)
|
||||
|
||||
form = MemberForm(request.POST, instance=member)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
|
||||
logging.info(
|
||||
@@ -156,7 +163,7 @@ def member_update(request, *args, **kwargs):
|
||||
return render(
|
||||
request,
|
||||
'error.html',
|
||||
{'error': _('Could not update member object')})
|
||||
{'error': form.errors})
|
||||
|
||||
|
||||
@ensure_csrf_cookie
|
||||
|
||||
Reference in New Issue
Block a user