[TASK] Implement check of presentation type before validating event.
This commit is contained in:
parent
44c4cd43c0
commit
3c183a256b
|
@ -1,7 +1,7 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from frontend.models import Project, PersonGlobalIdentity, PresentationPerson, Presentation, PresentationEvent
|
from frontend.models import Project, PersonGlobalIdentity, PresentationPerson, Presentation, PresentationEvent, PresentationSubmission
|
||||||
from crispy_forms.helper import FormHelper
|
from crispy_forms.helper import FormHelper
|
||||||
from crispy_forms.layout import Submit, Layout
|
from crispy_forms.layout import Submit, Layout
|
||||||
|
|
||||||
|
@ -177,6 +177,26 @@ class PresentationEventForm(forms.ModelForm):
|
||||||
model = PresentationEvent
|
model = PresentationEvent
|
||||||
fields = [u'date', u'name', u'workshop', u'place', u'start_date', u'end_date']
|
fields = [u'date', u'name', u'workshop', u'place', u'start_date', u'end_date']
|
||||||
|
|
||||||
|
class PresentationSubmissionForm(forms.ModelForm):
|
||||||
|
""" Form for the PresentationSubmission"""
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super(PresentationSubmissionForm, self).__init__(*args, **kwargs)
|
||||||
|
self.helper = FormHelper()
|
||||||
|
self.helper.form_tag = False
|
||||||
|
self.helper.label_class = u'col-lg-2'
|
||||||
|
self.helper.field_class = u'col-lg-4'
|
||||||
|
self.helper.layout = Layout(
|
||||||
|
u'comment',
|
||||||
|
u'email',
|
||||||
|
)
|
||||||
|
|
||||||
|
comment = forms.CharField(label='Kommentar')
|
||||||
|
email = forms.EmailField(label='E-Mail Adresse')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = PresentationSubmission
|
||||||
|
fields = [u'comment', u'email']
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class PresentationForm(forms.ModelForm):
|
class PresentationForm(forms.ModelForm):
|
||||||
|
@ -190,19 +210,13 @@ class PresentationForm(forms.ModelForm):
|
||||||
self.helper.layout = Layout(
|
self.helper.layout = Layout(
|
||||||
u'title',
|
u'title',
|
||||||
u'type',
|
u'type',
|
||||||
u'abstract',
|
u'abstract'
|
||||||
u'comments',
|
|
||||||
u'email'
|
|
||||||
)
|
)
|
||||||
|
|
||||||
title = forms.CharField()
|
title = forms.CharField(label='Titel')
|
||||||
type = forms.ChoiceField(choices=[(u'new', u'Hauptvortrag'), (u'existing', u'andere Veranstaltung')], initial=u'new', widget=forms.RadioSelect())
|
type = forms.ChoiceField(choices=[(u'main', u'Hauptvortrag'), (u'other', u'andere Veranstaltung')], initial=u'main', widget=forms.RadioSelect(), label='Veranstaltungstyp')
|
||||||
abstract = forms.TextInput()
|
abstract = forms.TextInput()
|
||||||
|
|
||||||
# Event (other event)
|
|
||||||
comments = forms.CharField()
|
|
||||||
email = forms.EmailField()
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Presentation
|
model = Presentation
|
||||||
fields = [u'title', u'type', u'abstract']
|
fields = [u'title', u'type', u'abstract']
|
||||||
|
|
|
@ -18,26 +18,32 @@ class Project(models.Model):
|
||||||
|
|
||||||
class Presentation(models.Model):
|
class Presentation(models.Model):
|
||||||
""" Presention Model for PresentationForm"""
|
""" Presention Model for PresentationForm"""
|
||||||
title = models.CharField(max_length=255)
|
title = models.CharField(max_length=255, verbose_name='Titel')
|
||||||
type = models.CharField(max_length=255)
|
type = models.CharField(max_length=255, choices=((u'main', u'Hauptvortrag'), (u'other', u'andere Veranstaltung')), default=u'main', verbose_name='Veranstaltungstyp')
|
||||||
abstract = models.TextField()
|
abstract = models.TextField(verbose_name=u'Zusammenfassung')
|
||||||
|
|
||||||
|
class PresentationSubmission(models.Model):
|
||||||
|
""" Submission containing a Presentation """
|
||||||
|
email = models.EmailField(max_length=255, verbose_name='E-Mail Adresse')
|
||||||
|
comment = models.TextField(verbose_name=u'Kommentar')
|
||||||
|
presentation = models.ForeignKey(Presentation, blank=False, null=False, db_index=True)
|
||||||
|
|
||||||
class PresentationEvent(models.Model):
|
class PresentationEvent(models.Model):
|
||||||
"""Veranstaltung"""
|
"""Veranstaltung"""
|
||||||
date = models.DateField()
|
date = models.DateField(verbose_name='Veranstaltungsdatum')
|
||||||
name = models.CharField(max_length=255)
|
name = models.CharField(max_length=255, verbose_name='Name')
|
||||||
workshop = models.BooleanField()
|
workshop = models.BooleanField(verbose_name='Workshop')
|
||||||
place = models.CharField(max_length=255)
|
place = models.CharField(max_length=255, verbose_name='Ort')
|
||||||
start_date = models.DateField()
|
start_date = models.DateField(verbose_name='Startdatum')
|
||||||
end_date = models.DateField()
|
end_date = models.DateField(verbose_name='Enddatum')
|
||||||
presentatiom = models.ForeignKey(Presentation, blank=False, null=False, db_index=True)
|
presentation = models.ForeignKey(Presentation, blank=False, null=False, db_index=True)
|
||||||
|
|
||||||
class PresentationPerson(models.Model):
|
class PresentationPerson(models.Model):
|
||||||
""" Person Model for PresentationForm"""
|
""" Person Model for PresentationForm"""
|
||||||
given_name = models.CharField(max_length=255)
|
given_name = models.CharField(max_length=255, verbose_name='Vorname')
|
||||||
additional_name = models.CharField(max_length=255)
|
additional_name = models.CharField(max_length=255, verbose_name='Namenszusatz', blank=True)
|
||||||
family_name = models.CharField(max_length=255)
|
family_name = models.CharField(max_length=255, verbose_name='Nachname')
|
||||||
hshmembership = models.CharField(max_length=255, choices=((u'yes', u'Ja'), (u'no', u'Nein'), (u'maybe', u'Maybe')), default=u'maybe')
|
hshmembership = models.CharField(max_length=255, choices=((u'yes', u'Ja'), (u'no', u'Nein'), (u'maybe', u'Maybe')), default=u'maybe', verbose_name='Hochschulangehörigkeit')
|
||||||
presentation = models.ForeignKey(Presentation, blank=False, null=False, db_index=True)
|
presentation = models.ForeignKey(Presentation, blank=False, null=False, db_index=True)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,6 @@
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="{% url 'frontend-projects' %}">Citavi projects</a></li>
|
<li><a href="{% url 'frontend-projects' %}">Citavi projects</a></li>
|
||||||
<li><a href="{% url 'frontend-presentation-add' %}">Add presentations</a></li>
|
<li><a href="{% url 'frontend-presentation-add' %}">Add presentations</a></li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
Feel free to discover.<br>
|
Feel free to discover.<br>
|
||||||
</p>
|
</p>
|
||||||
|
|
|
@ -68,6 +68,8 @@
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
|
<hr>
|
||||||
|
{% crispy submission_form %}
|
||||||
<hr>
|
<hr>
|
||||||
<input type="submit" class="btn btn-primary btn-default" value="Submit">
|
<input type="submit" class="btn btn-primary btn-default" value="Submit">
|
||||||
</form>
|
</form>
|
||||||
|
|
|
@ -15,7 +15,7 @@ from django.contrib.auth.views import login, logout
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
|
|
||||||
from frontend.forms import NewProjectForm, FileUploadForm, PersonMapForm
|
from frontend.forms import NewProjectForm, FileUploadForm, PersonMapForm
|
||||||
from frontend.forms import PresentationForm, PresentationEventForm, PresentationPersonForm
|
from frontend.forms import PresentationForm, PresentationEventForm, PresentationPersonForm, PresentationSubmissionForm
|
||||||
from frontend.forms import PresentationEventFormHelper, PresentationPersonFormHelper
|
from frontend.forms import PresentationEventFormHelper, PresentationPersonFormHelper
|
||||||
from frontend.models import Presentation, PresentationEvent, PresentationPerson
|
from frontend.models import Presentation, PresentationEvent, PresentationPerson
|
||||||
from frontend.formsets import PresentationEventInlineFormset, PresentationPersonInlineFormset
|
from frontend.formsets import PresentationEventInlineFormset, PresentationPersonInlineFormset
|
||||||
|
@ -118,6 +118,7 @@ class PresentationAddView(ProtectedTemplateView):
|
||||||
|
|
||||||
""" These guys are passed through using get_context_data(). """
|
""" These guys are passed through using get_context_data(). """
|
||||||
presentation_form = None
|
presentation_form = None
|
||||||
|
submission_form = None
|
||||||
person_formset = None
|
person_formset = None
|
||||||
event_formset = None
|
event_formset = None
|
||||||
person_formhelper = PresentationPersonFormHelper
|
person_formhelper = PresentationPersonFormHelper
|
||||||
|
@ -142,12 +143,14 @@ class PresentationAddView(ProtectedTemplateView):
|
||||||
def create_blank_forms(self):
|
def create_blank_forms(self):
|
||||||
""" Create blank form + formsets for the user to fill. """
|
""" Create blank form + formsets for the user to fill. """
|
||||||
self.presentation_form = PresentationForm(prefix='presentation')
|
self.presentation_form = PresentationForm(prefix='presentation')
|
||||||
|
self.submission_form = PresentationSubmissionForm(prefix='submission')
|
||||||
self.person_formset = PresentationPersonInlineFormset(prefix='person')
|
self.person_formset = PresentationPersonInlineFormset(prefix='person')
|
||||||
self.event_formset = PresentationEventInlineFormset(prefix='event')
|
self.event_formset = PresentationEventInlineFormset(prefix='event')
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
""" Add form + formsets to template context. """
|
""" Add form + formsets to template context. """
|
||||||
kwargs[u'presentation_form'] = self.presentation_form
|
kwargs[u'presentation_form'] = self.presentation_form
|
||||||
|
kwargs[u'submission_form'] = self.submission_form
|
||||||
kwargs[u'person_formset'] = self.person_formset
|
kwargs[u'person_formset'] = self.person_formset
|
||||||
kwargs[u'event_formset'] = self.event_formset
|
kwargs[u'event_formset'] = self.event_formset
|
||||||
kwargs[u'person_formhelper'] = self.person_formhelper
|
kwargs[u'person_formhelper'] = self.person_formhelper
|
||||||
|
@ -159,30 +162,39 @@ class PresentationAddView(ProtectedTemplateView):
|
||||||
def handle_forms(self, request, *args, **kwargs):
|
def handle_forms(self, request, *args, **kwargs):
|
||||||
""" Once a POST came in, try and validate the forms, saving the data. """
|
""" Once a POST came in, try and validate the forms, saving the data. """
|
||||||
presentation = None
|
presentation = None
|
||||||
success = 0
|
presentation_ok = False
|
||||||
""" Check the PresentationForm first and save it. """
|
person_ok = False
|
||||||
|
event_ok = False
|
||||||
|
submission_ok = False
|
||||||
|
""" Create all the forms and formsets based on request params to do validation. """
|
||||||
self.presentation_form = PresentationForm(request.POST, request.FILES, prefix='presentation')
|
self.presentation_form = PresentationForm(request.POST, request.FILES, prefix='presentation')
|
||||||
if self.presentation_form.is_valid():
|
self.person_formset = PresentationPersonInlineFormset(request.POST, request.FILES, prefix='person')
|
||||||
presentation = self.presentation_form.save()
|
self.event_formset = PresentationEventInlineFormset(request.POST, request.FILES, prefix='event')
|
||||||
success += 1
|
self.submission_form = PresentationSubmissionForm(request.POST, request.FILES, prefix='submission')
|
||||||
""" If the PresentationForm was good, we now have a Presentation to use for the other guys. """
|
""" Check all for validity """
|
||||||
if presentation != None:
|
presentation_ok = self.presentation_form.is_valid()
|
||||||
""" Get the person formset, validate and save. """
|
submission_ok = self.submission_form.is_valid()
|
||||||
person_formset = PresentationPersonInlineFormset(request.POST, request.FILES, instance=presentation, prefix='person')
|
person_ok = self.person_formset.is_valid()
|
||||||
if person_formset.is_valid():
|
""" Only other event type needs a valid event formset. """
|
||||||
person_formset.save()
|
print(presentation_ok, person_ok, event_ok, submission_ok)
|
||||||
success += 1
|
print(self.submission_form)
|
||||||
""" Get the event formset, validate and save. """
|
if presentation_ok and self.presentation_form.cleaned_data[u'type'] == 'other':
|
||||||
event_formset = PresentationEventInlineFormset(request.POST, request.FILES, instance=presentation, prefix='event')
|
event_ok = self.event_formset.is_valid()
|
||||||
if event_formset.is_valid():
|
|
||||||
event_formset.save()
|
|
||||||
success += 1
|
|
||||||
else:
|
else:
|
||||||
""" Create the formsets without the PresentationInstance, so their validation results can be displayed. """
|
event_ok = True
|
||||||
self.person_formset = PresentationPersonInlineFormset(request.POST, request.FILES, prefix='person')
|
""" Only if everything is alright, store it."""
|
||||||
self.event_formset = PresentationEventInlineFormset(request.POST, request.FILES, prefix='event')
|
if presentation_ok == True and person_ok == True and event_ok == True and submission_ok == True:
|
||||||
""" Everything was good, go to success URI or something, i don't know. """
|
presentation = self.presentation_form.save()
|
||||||
if success == 3:
|
""" Now we can create the other ones based on the saved presentation to save them, too. """
|
||||||
|
submission_form = PresentationSubmissionForm(request.POST, request.FILES, instance=presentation, prefix='submission')
|
||||||
|
submission_form.save()
|
||||||
|
person_formset = PresentationPersonInlineFormset(request.POST, request.FILES, instance=presentation, prefix='person')
|
||||||
|
person_formset.save()
|
||||||
|
""" Conditionally save the events depending on whether they are needed. """
|
||||||
|
if presentation.type == 'other':
|
||||||
|
event_formset = PresentationEventInlineFormset(request.POST, request.FILES, instance=presentation, prefix='event')
|
||||||
|
event_formset.save()
|
||||||
|
""" we're done. """
|
||||||
self.success = True
|
self.success = True
|
||||||
self.create_blank_forms()
|
self.create_blank_forms()
|
||||||
else:
|
else:
|
||||||
|
|
Loading…
Reference in New Issue