Enabled event numbers.

This commit is contained in:
2018-01-24 17:19:29 +01:00
parent 05d5a77a97
commit 9f2ba9912c
11 changed files with 145 additions and 19 deletions

View File

@@ -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,