Enabled event numbers.
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user