Skip to content
Snippets Groups Projects
Commit 5297e479 authored by Nadja Geisler's avatar Nadja Geisler :sunny:
Browse files

add owner-related ak creation

currently only works when creating a new owner
parent 821b2b5e
Branches
No related tags found
No related merge requests found
# Generated by Django 2.2.6 on 2019-10-19 17:47
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('AKModel', '0016_slot_room_blank'),
]
operations = [
migrations.AddField(
model_name='akowner',
name='slug',
field=models.SlugField(blank=True, help_text='Slug for URL generation', max_length=64, unique=True, verbose_name='Slug'),
),
migrations.AlterField(
model_name='akowner',
name='name',
field=models.CharField(help_text='Name to identify an AK owner by', max_length=64, verbose_name='Nickname'),
),
]
# Create your models here. # Create your models here.
import itertools
from django.db import models from django.db import models
from django.utils.text import slugify
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
...@@ -32,7 +35,9 @@ class Event(models.Model): ...@@ -32,7 +35,9 @@ class Event(models.Model):
class AKOwner(models.Model): class AKOwner(models.Model):
""" An AKOwner describes the person organizing/holding an AK. """ An AKOwner describes the person organizing/holding an AK.
""" """
name = models.CharField(max_length=256, verbose_name=_('Nickname'), help_text=_('Name to identify an AK owner by')) name = models.CharField(max_length=64, verbose_name=_('Nickname'), help_text=_('Name to identify an AK owner by'))
slug = models.SlugField(max_length=64, blank=True, unique=True, verbose_name=_('Slug'),
help_text=_('Slug for URL generation'))
email = models.EmailField(max_length=128, blank=True, verbose_name=_('E-Mail Address'), help_text=_('Contact mail')) email = models.EmailField(max_length=128, blank=True, verbose_name=_('E-Mail Address'), help_text=_('Contact mail'))
institution = models.CharField(max_length=128, blank=True, verbose_name=_('Institution'), help_text=_('Uni etc.')) institution = models.CharField(max_length=128, blank=True, verbose_name=_('Institution'), help_text=_('Uni etc.'))
link = models.URLField(blank=True, verbose_name=_('Web Link'), help_text=_('Link to Homepage')) link = models.URLField(blank=True, verbose_name=_('Web Link'), help_text=_('Link to Homepage'))
...@@ -51,6 +56,35 @@ class AKOwner(models.Model): ...@@ -51,6 +56,35 @@ class AKOwner(models.Model):
return f"{self.name} ({self.institution})" return f"{self.name} ({self.institution})"
return self.name return self.name
def _generate_slug(self):
max_length = self._meta.get_field('slug').max_length
slug_candidate = slugify(self.name)[:max_length]
if not AKOwner.objects.filter(slug=slug_candidate).exists():
self.slug = slug_candidate
return
slug_candidate = slugify(slug_candidate + '_' + self.institution)[:max_length]
if not AKOwner.objects.filter(slug=slug_candidate).exists():
self.slug = slug_candidate
return
for i in itertools.count(1):
if not AKOwner.objects.filter(slug=slug_candidate).exists():
break
digits = len(str(i))
slug_candidate = '{}-{}'.format(slug_candidate[:-digits + 1], i)
self.slug = slug_candidate
def save(self, *args, **kwargs):
if not self.slug:
self._generate_slug()
super().save(*args, **kwargs)
@staticmethod
def get_by_slug(slug):
return AKOwner.objects.get(slug=slug)
class AKCategory(models.Model): class AKCategory(models.Model):
""" An AKCategory describes the characteristics of an AK, e.g. content vs. recreational. """ An AKCategory describes the characteristics of an AK, e.g. content vs. recreational.
......
from django import forms from django import forms
from AKModel.models import AK from AKModel.models import AK, AKOwner
class AKForm(forms.ModelForm): class AKForm(forms.ModelForm):
...@@ -29,3 +29,9 @@ class AKForm(forms.ModelForm): ...@@ -29,3 +29,9 @@ class AKForm(forms.ModelForm):
class AKWishForm(AKForm): class AKWishForm(AKForm):
class Meta(AKForm.Meta): class Meta(AKForm.Meta):
exclude = ['owners'] exclude = ['owners']
class AKOwnerForm(forms.ModelForm):
class Meta:
model = AKOwner
fields = ['name', 'email', 'institution', 'link']
{% extends 'base.html' %}
{% load i18n %}
{% load bootstrap4 %}
{% load fontawesome %}
{% block title %}{{ event.slug }} - {% trans "AK Owner" %}{% endblock %}
{% block breadcrumbs %}
<li class="breadcrumb-item"><a href="#">AKPlanning</a></li>
<li class="breadcrumb-item"><a href="#">{{ event.slug }}</a></li>
<li class="breadcrumb-item"><a
href="{% url 'submit:submission_overview' event_slug=event.slug %}">{% trans "AK Submission" %}</a></li>
<li class="breadcrumb-item active">{{ owner.slug }}</li>
{% endblock %}
{% block content %}
{% block headline %}
<h2>{% trans 'AK Owner' %}</h2>
{% endblock %}
<form method="POST" class="post-form">{% csrf_token %}
{% bootstrap_form form %}
{% buttons %}
<button type="reset" class="btn btn-danger">
{% fontawesome_icon "undo-alt" %} {% trans "Reset" %}
</button>
<a href="{% url 'submit:submission_overview' event_slug=event.slug %}" class="btn btn-secondary">
{% fontawesome_icon "times" %} {% trans "Cancel" %}
</a>
<button type="submit" class="save btn btn-primary float-right">
{% fontawesome_icon "check" %} {% trans "Submit" %}
</button>
{% endbuttons %}
</form>
{% endblock %}
\ No newline at end of file
...@@ -17,10 +17,8 @@ ...@@ -17,10 +17,8 @@
{% blocktrans %}On this page you can see a list of current AKs, change them and add new ones.{% endblocktrans %} {% blocktrans %}On this page you can see a list of current AKs, change them and add new ones.{% endblocktrans %}
<div class="jumbotron" style="margin-top:20px;"> <div class="jumbotron" style="margin-top:20px;">
<h2>{% trans "Submit" %}</h2> <a href="{% url 'submit:akowner_select_create' event_slug=event.slug %}" class="btn btn-primary">{% trans "New AK" %}</a>
<a href="{% url 'submit:submit_ak' event_slug=event.slug %}" class="btn btn-primary">{% trans "New AK" %}</a> <a href="{% url 'submit:submit_ak_wish' event_slug=event.slug %}" class="btn btn-info">{% trans "New AK Wish" %}</a>
<a href="{% url 'submit:submit_ak_wish' event_slug=event.slug %}"
class="btn btn-info">{% trans "New AK Wish" %}</a>
</div> </div>
......
...@@ -9,7 +9,9 @@ ...@@ -9,7 +9,9 @@
{% block breadcrumbs %} {% block breadcrumbs %}
<li class="breadcrumb-item"><a href="#">AKPlanning</a></li> <li class="breadcrumb-item"><a href="#">AKPlanning</a></li>
<li class="breadcrumb-item"><a href="#">{{ event.slug }}</a></li> <li class="breadcrumb-item"><a href="#">{{ event.slug }}</a></li>
<li class="breadcrumb-item"><a href="{% url 'submit:submission_overview' event_slug=event.slug %}">{% trans "AK Submission" %}</a></li> <li class="breadcrumb-item"><a
href="{% url 'submit:submission_overview' event_slug=event.slug %}">{% trans "AK Submission" %}</a></li>
<li class="breadcrumb-item"><a href="#">{{ owner.slug }}</a></li>
<li class="breadcrumb-item active">{% trans "New AK" %}</li> <li class="breadcrumb-item active">{% trans "New AK" %}</li>
{% endblock %} {% endblock %}
...@@ -24,7 +26,7 @@ ...@@ -24,7 +26,7 @@
<button type="reset" class="btn btn-danger"> <button type="reset" class="btn btn-danger">
{% fontawesome_icon "undo-alt" %} {% trans "Reset" %} {% fontawesome_icon "undo-alt" %} {% trans "Reset" %}
</button> </button>
&nbsp;&nbsp;
<a href="{% url 'submit:submission_overview' event_slug=event.slug %}" class="btn btn-secondary"> <a href="{% url 'submit:submission_overview' event_slug=event.slug %}" class="btn btn-secondary">
{% fontawesome_icon "times" %} {% trans "Cancel" %} {% fontawesome_icon "times" %} {% trans "Cancel" %}
</a> </a>
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
<li class="breadcrumb-item"><a href="#">AKPlanning</a></li> <li class="breadcrumb-item"><a href="#">AKPlanning</a></li>
<li class="breadcrumb-item"><a href="#">{{ event.slug }}</a></li> <li class="breadcrumb-item"><a href="#">{{ event.slug }}</a></li>
<li class="breadcrumb-item"><a href="#">{% trans "AK Submission" %}</a></li> <li class="breadcrumb-item"><a href="#">{% trans "AK Submission" %}</a></li>
<li class="breadcrumb-item"><a href="#">{{ owner.slug }}</a></li>
<li class="breadcrumb-item active">{% trans "New AK Wish" %}</li> <li class="breadcrumb-item active">{% trans "New AK Wish" %}</li>
{% endblock %} {% endblock %}
......
...@@ -13,7 +13,8 @@ urlpatterns = [ ...@@ -13,7 +13,8 @@ urlpatterns = [
path('aks/', views.AKListView.as_view(), name='ak_list'), path('aks/', views.AKListView.as_view(), name='ak_list'),
path('aks/category/<int:category_pk>', views.AKListByCategoryView.as_view(), name='ak_list_by_category'), path('aks/category/<int:category_pk>', views.AKListByCategoryView.as_view(), name='ak_list_by_category'),
path('aks/tag/<int:tag_pk>', views.AKListByTagView.as_view(), name='ak_list_by_tag'), path('aks/tag/<int:tag_pk>', views.AKListByTagView.as_view(), name='ak_list_by_tag'),
path('new/', views.AKSubmissionView.as_view(), name='submit_ak'), path('owner/', views.AKOwnerSelectCreateView.as_view(), name='akowner_select_create'),
path('<slug:owner_slug>/new/', views.AKSubmissionView.as_view(), name='submit_ak'),
path('new_wish/', views.AKWishSubmissionView.as_view(), name='submit_ak_wish'), path('new_wish/', views.AKWishSubmissionView.as_view(), name='submit_ak_wish'),
]) ])
), ),
......
...@@ -4,11 +4,11 @@ from django.urls import reverse_lazy ...@@ -4,11 +4,11 @@ from django.urls import reverse_lazy
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django.views.generic import ListView, DetailView, CreateView from django.views.generic import ListView, DetailView, CreateView
from AKModel.models import AK, AKCategory, AKTag from AKModel.models import AK, AKCategory, AKTag, AKOwner
from AKModel.models import Event from AKModel.models import Event
from AKModel.views import EventSlugMixin from AKModel.views import EventSlugMixin
from AKModel.views import FilterByEventSlugMixin from AKModel.views import FilterByEventSlugMixin
from AKSubmission.forms import AKForm, AKWishForm from AKSubmission.forms import AKForm, AKWishForm, AKOwnerForm
class SubmissionOverviewView(FilterByEventSlugMixin, ListView): class SubmissionOverviewView(FilterByEventSlugMixin, ListView):
...@@ -69,6 +69,11 @@ class AKSubmissionView(EventSlugMixin, CreateView): ...@@ -69,6 +69,11 @@ class AKSubmissionView(EventSlugMixin, CreateView):
template_name = 'AKSubmission/submit_new.html' template_name = 'AKSubmission/submit_new.html'
form_class = AKForm form_class = AKForm
def get_initial(self):
initials = super(AKSubmissionView, self).get_initial()
initials['owners'] = [AKOwner.get_by_slug(self.kwargs['owner_slug'])]
return initials
def get_success_url(self): def get_success_url(self):
messages.add_message(self.request, messages.SUCCESS, _("AK successfully created")) messages.add_message(self.request, messages.SUCCESS, _("AK successfully created"))
return reverse_lazy('submit:ak_detail', kwargs={'event_slug': self.kwargs['event_slug'], 'pk': self.object.pk}) return reverse_lazy('submit:ak_detail', kwargs={'event_slug': self.kwargs['event_slug'], 'pk': self.object.pk})
...@@ -94,3 +99,21 @@ class AKSubmissionView(EventSlugMixin, CreateView): ...@@ -94,3 +99,21 @@ class AKSubmissionView(EventSlugMixin, CreateView):
class AKWishSubmissionView(AKSubmissionView): class AKWishSubmissionView(AKSubmissionView):
template_name = 'AKSubmission/submit_new_wish.html' template_name = 'AKSubmission/submit_new_wish.html'
form_class = AKWishForm form_class = AKWishForm
class AKOwnerSelectCreateView(EventSlugMixin, CreateView):
model = AKOwner
template_name = 'AKSubmission/akowner_create_select.html'
form_class = AKOwnerForm
def get_success_url(self):
return reverse_lazy('submit:submit_ak',
kwargs={'event_slug': self.kwargs['event_slug'], 'owner_slug': self.object.slug})
def form_valid(self, form):
instance = form.save(commit=False)
# Set event
instance.event = Event.get_by_slug(self.kwargs["event_slug"])
return super().form_valid(form)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment