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
No related branches found
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.
import itertools
from django.db import models
from django.utils.text import slugify
from django.utils.translation import gettext_lazy as _
......@@ -32,7 +35,9 @@ class Event(models.Model):
class AKOwner(models.Model):
""" 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'))
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'))
......@@ -51,6 +56,35 @@ class AKOwner(models.Model):
return f"{self.name} ({self.institution})"
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):
""" An AKCategory describes the characteristics of an AK, e.g. content vs. recreational.
......
from django import forms
from AKModel.models import AK
from AKModel.models import AK, AKOwner
class AKForm(forms.ModelForm):
......@@ -29,3 +29,9 @@ class AKForm(forms.ModelForm):
class AKWishForm(AKForm):
class Meta(AKForm.Meta):
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 @@
{% 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;">
<h2>{% trans "Submit" %}</h2>
<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:akowner_select_create' 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>
</div>
......
......@@ -9,7 +9,9 @@
{% 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"><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>
{% endblock %}
......@@ -24,7 +26,7 @@
<button type="reset" class="btn btn-danger">
{% fontawesome_icon "undo-alt" %} {% trans "Reset" %}
</button>
&nbsp;&nbsp;
<a href="{% url 'submit:submission_overview' event_slug=event.slug %}" class="btn btn-secondary">
{% fontawesome_icon "times" %} {% trans "Cancel" %}
</a>
......
......@@ -8,6 +8,7 @@
<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="#">{% 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>
{% endblock %}
......
......@@ -13,7 +13,8 @@ urlpatterns = [
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/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'),
])
),
......
......@@ -4,11 +4,11 @@ from django.urls import reverse_lazy
from django.utils.translation import gettext_lazy as _
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.views import EventSlugMixin
from AKModel.views import FilterByEventSlugMixin
from AKSubmission.forms import AKForm, AKWishForm
from AKSubmission.forms import AKForm, AKWishForm, AKOwnerForm
class SubmissionOverviewView(FilterByEventSlugMixin, ListView):
......@@ -69,6 +69,11 @@ class AKSubmissionView(EventSlugMixin, CreateView):
template_name = 'AKSubmission/submit_new.html'
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):
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})
......@@ -94,3 +99,21 @@ class AKSubmissionView(EventSlugMixin, CreateView):
class AKWishSubmissionView(AKSubmissionView):
template_name = 'AKSubmission/submit_new_wish.html'
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.
Finish editing this message first!
Please register or to comment