Enabled event numbers.
This commit is contained in:
@@ -19,6 +19,8 @@ INCREMENTAL_PUBLISHER_GROUP = 'OnlineRedaktion'
|
||||
# Form Config
|
||||
COMMON_CHAR_FIELD_LENGTH = 250
|
||||
|
||||
NUMBER_MAX_LENGTH = 12
|
||||
|
||||
TITLE_MAX_LENGTH = COMMON_CHAR_FIELD_LENGTH
|
||||
|
||||
TRAINER_NAME_MAX_LENGTH = COMMON_CHAR_FIELD_LENGTH
|
||||
|
||||
39
dav_events/migrations/0002_auto_20180124_1514.py
Normal file
39
dav_events/migrations/0002_auto_20180124_1514.py
Normal file
@@ -0,0 +1,39 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.9 on 2018-01-24 15:14
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import dav_events.models
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django_countries.fields
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('dav_events', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='event',
|
||||
name='accepted_by',
|
||||
field=models.ForeignKey(null=True, on_delete=models.SET(dav_events.models.get_ghost_user), related_name='+', to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='event',
|
||||
name='number',
|
||||
field=models.CharField(blank=True, max_length=12),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='event',
|
||||
name='country',
|
||||
field=django_countries.fields.CountryField(max_length=2),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='event',
|
||||
name='terrain',
|
||||
field=models.CharField(choices=[(b'gym', 'Kletterhalle'), (b'crag', 'Klettergarten'), (b'flats', 'Flachland'), (b'submountains', 'Mittelgebirge'), (b'alpine', 'Alpin')], max_length=25),
|
||||
),
|
||||
]
|
||||
20
dav_events/migrations/0003_auto_20180124_1617.py
Normal file
20
dav_events/migrations/0003_auto_20180124_1617.py
Normal file
@@ -0,0 +1,20 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.9 on 2018-01-24 16:17
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('dav_events', '0002_auto_20180124_1514'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='event',
|
||||
name='number',
|
||||
field=models.CharField(blank=True, max_length=12, unique=True),
|
||||
),
|
||||
]
|
||||
@@ -1,5 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import datetime
|
||||
import logging
|
||||
import os
|
||||
import re
|
||||
from babel.dates import format_date
|
||||
from django.conf import settings
|
||||
from django.contrib.auth import get_user_model
|
||||
@@ -14,6 +17,8 @@ from . import choices
|
||||
from . import config
|
||||
from . import emails
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
CHOICE_FIELD_MAX_LENGTH = 25
|
||||
|
||||
|
||||
@@ -30,6 +35,13 @@ class Event(models.Model):
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
accepted = models.BooleanField(default=False)
|
||||
accepted_at = models.DateTimeField(null=True)
|
||||
accepted_by = models.ForeignKey(settings.AUTH_USER_MODEL,
|
||||
null=True,
|
||||
on_delete=models.SET(get_ghost_user),
|
||||
related_name='+')
|
||||
number = models.CharField(unique=True,
|
||||
max_length=config.NUMBER_MAX_LENGTH,
|
||||
blank=True)
|
||||
|
||||
# DescriptionForm
|
||||
title = models.CharField(max_length=config.TITLE_MAX_LENGTH)
|
||||
@@ -135,9 +147,9 @@ class Event(models.Model):
|
||||
default_permissions = ('view', 'accept', 'edit', 'delete')
|
||||
|
||||
def __unicode__(self):
|
||||
return u'{sport} - {title} ({first_day})'.format(title=self.title,
|
||||
sport=self.sport,
|
||||
first_day=self.first_day)
|
||||
return u'{number} - {title} ({date})'.format(number=self.number,
|
||||
title=self.title,
|
||||
date=self.get_short_date())
|
||||
|
||||
def get_absolute_url(self):
|
||||
return reverse('dav_events:event_detail', kwargs={'pk': self.pk})
|
||||
@@ -164,10 +176,13 @@ class Event(models.Model):
|
||||
for email in emails_to_send:
|
||||
email.send()
|
||||
|
||||
def accept(self):
|
||||
def accept(self, user=None):
|
||||
if not self.accepted:
|
||||
self.number = self.get_next_number()
|
||||
self.accepted = True
|
||||
self.accepted_at = timezone.now()
|
||||
if user:
|
||||
self.accepted_by = user
|
||||
self.save()
|
||||
emails_to_send = [
|
||||
emails.EventAcceptedMail(event=self),
|
||||
@@ -176,6 +191,33 @@ class Event(models.Model):
|
||||
for email in emails_to_send:
|
||||
email.send()
|
||||
|
||||
def get_next_number(self):
|
||||
counter = 0
|
||||
|
||||
year = self.first_day.year
|
||||
year_begin = datetime.date(year, 1, 1)
|
||||
year_end = datetime.date(year, 12, 31)
|
||||
qs = Event.objects.filter(accepted=True,
|
||||
sport=self.sport,
|
||||
first_day__gte=year_begin,
|
||||
first_day__lte=year_end).order_by('-number')
|
||||
last = qs.first()
|
||||
if last:
|
||||
match = re.match(r'^(?P<sport>[A-Z])(?P<count>[0-9][0-9]*)/(?P<year>[0-9][0-9]*)', last.number)
|
||||
if match:
|
||||
gd = match.groupdict()
|
||||
counter = int(gd['count'])
|
||||
|
||||
counter += 1
|
||||
n = '%s%02d/%d' % (self.sport, counter, year % 100)
|
||||
return n
|
||||
|
||||
def get_number(self):
|
||||
if self.accepted and self.number:
|
||||
return self.number
|
||||
else:
|
||||
return '%s**/%d' % (self.sport, self.first_day.year % 100)
|
||||
|
||||
def get_short_date(self, begin_date=None, end_date=None):
|
||||
if begin_date is None:
|
||||
begin_date = self.first_day
|
||||
@@ -209,6 +251,7 @@ class Event(models.Model):
|
||||
def get_template_context(self):
|
||||
context = {
|
||||
'event': self,
|
||||
'number': self.get_number(),
|
||||
'mode': self.mode,
|
||||
'sport': self.sport,
|
||||
'title': self.title,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
Hallo {{ trainer_firstname }},
|
||||
|
||||
deine folgende Veranstaltung wurde von einem Tourenreferent freigegeben:
|
||||
ein Tourenreferent hat deine Veranstaltung freigegeben:
|
||||
|
||||
-----
|
||||
{{ event.render_as_text }}-----
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<span class="panel-title">{{ sport|upper }}**/{{ first_day|date:'y' }} - {{ title }}</span>
|
||||
<span class="panel-title">{{ number }} - {{ title }}</span>
|
||||
</div>
|
||||
<ul class="list-group">
|
||||
<li class="list-group-item">
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{% load i18n %}{{ sport|upper }}**/{{ first_day|date:'y' }} - {{ title }}
|
||||
{% load i18n %}{{ number }} - {{ title }}
|
||||
|
||||
{{ short_date }}
|
||||
{% if alt_short_date %}({% trans 'Ersatztermin' %}: {{ alt_short_date }})
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{% extends 'dav_events/base.html' %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block head-title %}{{ event.title }} - {{ block.super }}{% endblock head-title %}
|
||||
{% block head-title %}{{ event }} - {{ block.super }}{% endblock head-title %}
|
||||
|
||||
{% block page-container-fluid %}
|
||||
<div class="action-tabs">
|
||||
@@ -34,17 +34,35 @@
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-body">
|
||||
<div class="row">
|
||||
<div class="col-sm-2">
|
||||
<strong>{% trans 'Eingereicht' %}:</strong>
|
||||
</div>
|
||||
<div class="col-sm-7">
|
||||
{{ event.created_at|date:'l, d. F Y, H:i' }} Uhr
|
||||
<div class="col-sm-10">
|
||||
<div class="row">
|
||||
<div class="col-sm-2">
|
||||
<strong>{% trans 'Eingereicht' %}:</strong>
|
||||
</div>
|
||||
<div class="col-sm-10">
|
||||
{{ event.created_at|date:'l, d. F Y, H:i' }} {% trans 'Uhr' %}<br />
|
||||
{{ event.owner.get_full_name }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-2">
|
||||
<strong>{% trans 'Freigegeben' %}:</strong>
|
||||
</div>
|
||||
<div class="col-sm-10">
|
||||
{% if event.accepted %}
|
||||
{{ event.accepted_at|date:'l, d. F Y, H:i' }} {% trans 'Uhr' %}<br />
|
||||
{{ event.accepted_by.get_full_name }}
|
||||
{% else %}
|
||||
-
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-2">
|
||||
{% if event.accepted %}
|
||||
<span class="label label-success">{% trans 'Freigegeben' %}</span>
|
||||
<span class="label label-warning">{% trans 'Freigegeben' %}</span>
|
||||
{% else %}
|
||||
<span class="label label-danger">{% trans 'Nicht Freigegeben' %}</span>
|
||||
<span class="label label-danger">{% trans 'Eingereicht' %}</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{% trans 'Spielart' %}</th>
|
||||
<th>{% trans 'Nummer' %}</th>
|
||||
<th>{% trans 'Titel' %}</th>
|
||||
<th>{% trans 'Trainer' %}</th>
|
||||
<th>{% trans 'Datum' %}</th>
|
||||
@@ -32,6 +33,7 @@
|
||||
<th><input type="text" placeholder="{% trans 'Filter' %}" /></th>
|
||||
<th><input type="text" placeholder="{% trans 'Filter' %}" /></th>
|
||||
<th><input type="text" placeholder="{% trans 'Filter' %}" /></th>
|
||||
<th><input type="text" placeholder="{% trans 'Filter' %}" /></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@@ -40,6 +42,9 @@
|
||||
<td>
|
||||
{{ event.get_sport_display }}
|
||||
</td>
|
||||
<td>
|
||||
<a href="{% url 'dav_events:event_detail' event.pk %}">{{ event.get_number }}</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="{% url 'dav_events:event_detail' event.pk %}">{{ event.title }}</a>
|
||||
</td>
|
||||
@@ -55,9 +60,9 @@
|
||||
</td>
|
||||
<td>
|
||||
{% if event.accepted %}
|
||||
<span class="label label-success">{% trans 'Freigegeben' %}</span>
|
||||
<span class="label label-warning">{% trans 'Freigegeben' %}</span>
|
||||
{% else %}
|
||||
<span class="label label-danger">{% trans 'Nicht Freigegeben' %}</span>
|
||||
<span class="label label-danger">{% trans 'Eingereicht' %}</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -102,7 +102,7 @@ class EventAcceptView(EventDetailView):
|
||||
|
||||
def accept(self):
|
||||
event = self.get_object()
|
||||
event.accept()
|
||||
event.accept(self.request.user)
|
||||
messages.success(self.request, _(u'Veranstaltung freigegeben.'))
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
|
||||
Reference in New Issue
Block a user