Fehlerbereinigung.

Mahjong Ranking berechnet nun die richtigen Ränge zu den legendären Kyu/Dan Punkten.

Stablie Version bevor die Datenstruktur des Mahjongrankings vereinfacht wird.
This commit is contained in:
Christian Berg
2015-08-18 20:25:35 +02:00
committed by Christian Berg
parent bafbf38612
commit 79eaeb34ad
1172 changed files with 1713 additions and 10150 deletions

View File

@@ -58,3 +58,5 @@ class EventForm(forms.ModelForm):
class Meta(object):
model = models.Event
exclude = ('event_count', 'event_series', )
EventSeriesFormset = forms.inlineformset_factory(models.Event, models.Event, fields=('start', 'end'), form=EventForm)

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kasu.events\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-01-05 19:23+0100\n"
"POT-Creation-Date: 2015-08-16 11:34+0200\n"
"PO-Revision-Date: 2014-12-08 16:06+0100\n"
"Last-Translator: Christian Berg <xeniac.at@gmail.com>\n"
"Language-Team: Kasu <verein@kasu.at>\n"
@@ -35,31 +35,30 @@ msgstr "Beginn"
msgid "end"
msgstr "Ende"
#: models.py:67 models.py:155
#: models.py:67 models.py:161
msgid "Name"
msgstr "Name"
#: models.py:68 models.py:156
#: models.py:68 models.py:162
msgid "Description"
msgstr "Beschreibung"
#: models.py:70 templates/events/event_archive.html:41
#: templates/events/event_detail.html:31 templates/events/event_detail.html:77
#: templates/events/event_list.html:15
#: templates/events/event_detail.html:31 templates/events/event_detail.html:76
msgid "Start"
msgstr "Beginn"
#: models.py:71 templates/events/event_detail.html:32
#: templates/events/event_detail.html:78
#: templates/events/event_detail.html:77
msgid "End"
msgstr "Ende"
#: models.py:72 models.py:159 templates/events/event_detail.html:37
#: templates/events/event_detail.html:73 templates/events/event_detail.html:79
#: models.py:72 models.py:165 templates/events/event_detail.html:36
#: templates/events/event_detail.html:72 templates/events/event_detail.html:78
msgid "Homepage"
msgstr "Homepage"
#: models.py:73 models.py:157
#: models.py:73 models.py:163
msgid "Image"
msgstr "Bild"
@@ -92,134 +91,129 @@ msgstr "Termin"
msgid "Events"
msgstr "Termine"
#: models.py:160
#: models.py:166
msgid "Postal Code"
msgstr "Postleitzahl"
#: models.py:161
#: models.py:167
msgid "Street Address"
msgstr "Straße"
#: models.py:162
#: models.py:168
msgid "Locality"
msgstr "Ort"
#: models.py:163
#: models.py:169
msgid "Country"
msgstr "Land"
#: models.py:166
#: models.py:172
msgid "Venue"
msgstr "Veranstaltungsort"
#: models.py:167
#: models.py:173
msgid "Venues"
msgstr "Veranstaltungsorte"
#: views.py:101 templates/events/event_detail.html:110
#: templates/events/event_form.html:9
msgid "Edit Event"
msgstr "Termin bearbeiten"
#: views.py:103 templates/events/event_form.html:9
#: templates/events/page.html:15
msgid "Add Event"
msgstr "Neuer Termin"
#: views.py:199
msgid "Event does not exist"
msgstr "Veranstaltung gibt es nicht"
#: templates/events/event_archive.html:5 templates/events/event_archive.html:9
msgid "Event Archive"
msgstr "Veranstaltungsarchiv"
#: templates/events/event_archive.html:36 templates/events/event_list.html:11
#: templates/events/event_archive.html:36 templates/events/event_list.html:14
msgid "Event Image"
msgstr "Veranstaltungsbild"
#: templates/events/event_archive.html:44 templates/events/event_list.html:18
#: templates/events/event_archive.html:44
msgid "from"
msgstr "von"
#: templates/events/event_archive.html:44 templates/events/event_list.html:18
#: templates/events/event_archive.html:44
msgid "to"
msgstr "bis"
#: templates/events/event_archive.html:52
#: templates/events/event_detail.html:35 templates/events/event_detail.html:65
#: templates/events/event_list.html:26
#: templates/events/event_detail.html:33 templates/events/event_detail.html:64
#: templates/events/event_list.html:25
msgid "Location"
msgstr "Ort"
#: templates/events/event_archive.html:56
#: templates/events/event_archive.html:57 templates/events/event_list.html:30
#: templates/events/event_archive.html:53 templates/events/event_list.html:26
msgid "Comments"
msgstr "Kommentare"
#: templates/events/event_archive.html:60
#: templates/events/event_archive.html:61
#: templates/events/event_detail.html:39 templates/events/event_detail.html:49
#: templates/events/event_archive.html:54
#: templates/events/event_detail.html:38 templates/events/event_detail.html:48
msgid "Photos"
msgstr "Fotos"
#: templates/events/event_archive.html:64
#: templates/events/event_archive.html:65
#: templates/events/event_archive.html:66
#: templates/events/event_detail.html:38 templates/events/event_detail.html:48
#: templates/events/event_detail.html:50
#: templates/events/event_archive.html:55
#: templates/events/event_archive.html:56
#: templates/events/event_detail.html:37 templates/events/event_detail.html:49
msgid "Hanchans"
msgstr "Hanchans"
#: templates/events/event_archive.html:70
msgid " Edit"
msgstr "Bearbeiten"
#: templates/events/event_detail.html:40
#: templates/events/event_detail.html:39
msgid "tourney"
msgstr "Turnier"
#: templates/events/event_detail.html:40
#: templates/events/event_detail.html:39
msgid "other rules apply here"
msgstr "hier gelten andere Regeln"
#: templates/events/event_detail.html:48
#: templates/events/event_detail.html:47
msgid "Info"
msgstr "Info"
#: templates/events/event_detail.html:51
#: templates/events/event_detail.html:50
msgid "Mai-Star Games"
msgstr "Mai-Star Spiele"
#: templates/events/event_detail.html:54
#: templates/events/event_detail.html:53
msgid "Tournament Ranking"
msgstr "Turnier Wertung"
#: templates/events/event_detail.html:75
#: templates/events/event_detail.html:74 templates/events/event_list.html:24
msgid "Date"
msgstr "Datum"
#: templates/events/event_detail.html:91
#: templates/events/event_detail.html:90
msgid "Share on Google+"
msgstr "Auf Google+ teilen"
#: templates/events/event_detail.html:92
#: templates/events/event_detail.html:91
msgid "Share on Twitter"
msgstr "Auf Twitter teilen"
#: templates/events/event_detail.html:93
#: templates/events/event_detail.html:92
msgid "Share on Facebook"
msgstr "Auf Facebook teilen"
#: templates/events/event_detail.html:94
#: templates/events/event_detail.html:93
msgid "Show on Google Maps"
msgstr "Auf Google Maps zeigen"
#: templates/events/event_detail.html:109 templates/events/event_form.html:9
#: views.py:103
msgid "Edit Event"
msgstr "Termin bearbeiten"
#: templates/events/event_detail.html:112
#, fuzzy
#| msgid "Date"
msgid "Add Dates"
msgstr "Datum"
#: templates/events/event_form.html:9 templates/events/page.html:9
#: views.py:105
msgid "Add Event"
msgstr "Neuer Termin"
#: templates/events/event_form.html:19
msgid "reset"
msgstr "Zurücksetzen"
#: templates/events/event_form.html:20
#: templates/events/eventseries_form.html:30
msgid "save"
msgstr "Speichern"
@@ -227,13 +221,22 @@ msgstr "Speichern"
msgid "Upcoming Events"
msgstr "Bevorstehende Veranstaltungen"
#: templates/events/event_list.html:41
msgid " Upload"
msgstr "Hochladen"
#: templates/events/eventseries_form.html:29
msgid "back"
msgstr ""
#: templates/events/page.html:10
msgid "Add to Google Calendar"
msgstr "Zu Google Kalender hinzufügen"
#: views.py:214
msgid "Event does not exist"
msgstr "Veranstaltung gibt es nicht"
#~ msgid " Edit"
#~ msgstr "Bearbeiten"
#~ msgid " Upload"
#~ msgstr "Hochladen"
#~ msgid "Add to Google Calendar"
#~ msgstr "Zu Google Kalender hinzufügen"
#~ msgid "left"
#~ msgstr "Links"

View File

@@ -104,6 +104,14 @@ class Event(image_models.ImageModel):
}
return reverse('event-detail', kwargs=kwargs)
def get_eventseries_form_url(self):
kwargs = {
'pk': self.id,
'year': self.start.strftime('%Y'),
'month': self.start.strftime('%m')
}
return reverse('eventseries-form', kwargs=kwargs)
def get_edit_url(self):
kwargs = {
'pk': self.id,
@@ -133,19 +141,17 @@ class Event(image_models.ImageModel):
return None
def save(self, **kwargs):
# Fülle fehlende Felder mit den Angaben der Hauptveranstaltung aus.
if self.event_series:
master_event = self.event_series
self.description = master_event.description
self.name = self.name or master_event.name
self.description = self.description or master_event.description
self.location = master_event.location
self.url = master_event.url
self.image = master_event.image
self.image = self.image or master_event.image
self.photo_count = self.photo_set.count()
super(Event, self).save(**kwargs)
# Update the rest of the event series:
for sub_event in Event.objects.filter(event_series=self):
sub_event.save()
# Update the Hanchans if necesery:
for hanchan in self.hanchan_set.all():
hanchan.save()

View File

@@ -50,9 +50,10 @@
<p>{{event.description|truncatewords_html:20}}</p>
<ul class="info">
<li><span class="fa fa-map-marker" title="{% trans 'Location' %}"></span> {{ event.location }}</li>
<li><a href="{{event.get_absolute_url}}#comments"><span class="fa fa-comments" title="{% trans 'Comments' %}"></span> {{ comment_count }}</a></li>
<li><a href="{% url 'event-photo-list' event.pk %}"><span class="fa fa-picture-o" title="{% trans 'Photos' %}"></span> {{ event.photo_count }}</a></li>
<li><a href="{% url 'event-hanchan-list' event.pk %}"><span class="fa fa-table" title="{% trans 'Hanchans' %}"></span> {{ event.hanchan_set.count }} {% trans 'Hanchans' %}</a></li>
<li><span class="fa fa-comments" title="{% trans 'Comments' %}"></span> <a href="{{event.get_absolute_url}}#comments">{{ comment_count }}</a></li>
<li><span class="fa fa-camera-retro" title="{% trans 'Photos' %}"></span> <a href="{% url 'event-photo-list' event.pk %}">{{ event.photo_count }}</a></li>
<li><span class="fa fa-table" title="{% trans 'Hanchans' %}"></span> <a href="{% url 'event-hanchan-list' event.pk %}">{{ event.hanchan_set.count }}</a></li>
<li><span class="fa fa-glass" title="{% trans 'Hanchans' %}"></span> <a href="{% url 'maistar-game-list' event.pk %}">{{ event.maistargame_set.count }}</a></li>
</ul>
{% if perms.events.change_event %}
<p class="right"><a href="{{ event.get_edit_url }}" class="button"><span class="fa fa-pencil"></span></a></p>

View File

@@ -108,6 +108,9 @@
{% if perms.events.change_event %}
<a class="button" href="{{ event.get_edit_url }}"><span class="fa fa-pencil"></span> {% trans "Edit Event" %}</a>
{% endif %}
{% if perms.events.add_event %}
<a class="button" href="{{ event.get_eventseries_form_url }}"><span class="fa fa-calendar-plus-o"></span> {% trans "Add Dates" %}</a>
{% endif %}
{% endblock %}
{% block javascript %}

View File

@@ -5,44 +5,30 @@
{% block teaser%}<h2>{% trans "Upcoming Events" %}</h2>{% endblock %}
{% block maincontent %}
{% for event in event_list %}
{% ifchanged %}<h3 class="grid_12">{{ event.start|date:'F Y' }}</h3>{% endifchanged %}
{% get_comment_count for event as comment_count %}
<a href="{{ event.get_absolute_url }}" class="grid_2"><img src="{{ event.get_thumbnail.url }}" alt=" {% trans 'Event Image' %}"
class="thumbnail"/></a>
<div class="grid_4" style="min-height:160px">
<h4><a href="{{ event.get_absolute_url }}">{{ event.name }}</a>
<sup>
{{ event.start|date:'SHORT_DATE_FORMAT' }}
{% if event.end %}
{% trans "from" %} {{ event.start|time:'H:i' }} {% trans "to" %} {{ event.end|time:'H:i' }}
{% else %}
{{ event.start|time:'H:i' }}
{% regroup event_list by start|date:'F Y' as month_list %}
{% for month in month_list %}
<h3 class="grid_12">{{ month.grouper }}</h3>
{% for event in month.list %}
{% get_comment_count for event as comment_count %}
<a href="{{ event.get_absolute_url }}" class="grid_2"><img
src="{{ event.get_thumbnail.url }}" alt=" {% trans 'Event Image' %}" class="thumbnail"/></a>
<div class="grid_4">
{% if perms.events.change_event %}
<a href="{{ event.get_edit_url }}" class="button" style="float:right"><span class="fa fa-pencil"></span></a>
{% endif %}
</sup>
</h4>
<p>{{event.description|truncatewords_html:20}}</p>
<ul class="info">
<li>
<span class="fa fa-map-marker" title="{% trans 'Location' %}"></span>
{{ event.location }}
</li>
<li>
<span class="fa fa-comments" title="{% trans 'Comments' %}"></span>
<a href="{{event.get_absolute_url}}#comments">{{ comment_count }}</a>
</li>
</ul>
<p class="right">
{% if perms.events.change_event %}
<a href="{{ event.get_edit_url }}" class="button"><span class="fa fa-pencil"></span></a>
{% endif %}
{% if perms.events.add_photo %}
<a href="{% url 'event-photo-list' event.pk %}" class="button"><span class="fa fa-file-picture-o"></span></a>
{% endif %}
</p>
</div>
{% if perms.events.add_photo %}
<a href="{% url 'event-photo-list' event.pk %}" class="button" style="float:right"><span class="fa fa-camera-retro"></span></a>
{% endif %}
<h4><a href="{{ event.get_absolute_url }}">{{ event.name }}</a></h4>
<ul class="info">
<li><span class="fa fa-calendar-o" title="{% trans 'Date' %}"></span> <time datetime="{{event.start|date:'c'}}">{{ event.start|date:'SHORT_DATE_FORMAT' }}</time></li>
<li><span class="fa fa-map-marker" title="{% trans 'Location' %}"></span> {{ event.location }}</li>
<li><span class="fa fa-comments" title="{% trans 'Comments' %}"></span> <a href="{{event.get_absolute_url}}#comments">{{ comment_count }}</a></li>
</ul>
<p>{{event.description|truncatewords_html:20}}</p>
</div>
{% if forloop.counter|divisibleby:2 %}<br class="clear">{% endif %}
{% endfor %}
{% endfor %}
{% if page_obj.has_other_pages %}{% include 'paginator.html' %}{% endif %}
{% endblock %}

View File

@@ -0,0 +1,40 @@
{% extends "events/event_detail.html" %}
{% load i18n django_markdown comments %}
{% block title %}{{ event.name }}{% endblock %}
{% block teaser %}
<h1>{{event.name}}</h1>
{% if event.description %}
<div id="teaser_text">{{event.description|markdown|truncatewords_html:75}}</div>
{% endif %}
{% endblock %}
{% block event_content %}
<h3>Hier kommt eine Tabelle rein!</h3>
<form class="grid_12" method="post">
{% csrf_token %}
{{ formset.management_form }}
<table>
{% for form in formset %}
{% if forloop.counter = 1 %}
<tr>{% for field in form.visible_fields %}<th>{{field.label_tag}}</th>{% endfor %}<th></th></tr>
{% endif %}
<tr>
{% for field in form.visible_fields %}<td class="{{field.css_classes}}">{{field}} {% for error in field.errors %}<br />{{error}}{% endfor %}</td>{% endfor %}
<td width="*">{{form.id}}</td>
</tr>
{% endfor %}
<tfoot><tr><td colspan="4" class="buttonbar">
<a href="{{ event.get_absolute_url }}" class="button"><span class="fa fa-undo"></span> {% trans 'back' %}</a>
<button type="submit"><span class="fa fa-hdd-o"></span> {% trans 'save' %}</button>
</td></tr></tfoot>
</table>
</form>
{% endblock %}
{% block comments %}{% endblock %}
{% block buttonbar %}
{% endblock %}

View File

@@ -3,13 +3,6 @@
{% block title %}{{page.title}}{% endblock %}
{% block sidebar %}
<a href="http://www.google.com/calendar/render?cid=https%3A%2F%2Fkasu.at%2Fevents.ics"
target="_blank"><img src="http://www.google.com/calendar/images/ext/gc_button6.gif"
alt="{% trans 'Add to Google Calendar' %}"></a>
{% endblock %}
{% block additional_buttonbar %}
{% if perms.events.add_event %}
<a href="{% url 'event-form' %}" class="button">

View File

@@ -12,6 +12,8 @@ urlpatterns = patterns(
name='event-archive'),
url(r'^(?P<year>[\d]{4})/(?P<month>[\d]+)/(?P<pk>[\d]+)/$',
EventDetail.as_view(), name='event-detail'),
url(r'^(?P<year>[\d]{4})/(?P<month>[\d]+)/(?P<pk>[\d]+)/add_dates/$',
EventSeriesForm.as_view(), name='eventseries-form'),
url(r'^(?P<year>[\d]{4})/(?P<month>[\d]+)/(?P<pk>[\d]+)/edit/$',
EventForm.as_view(), name='event-form'),
url(r'^add/$', EventForm.as_view(), name='event-form'),

View File

@@ -5,6 +5,7 @@ from datetime import timedelta
from django.contrib.auth.decorators import permission_required
from django.contrib.auth import get_user_model
from django.core.urlresolvers import reverse
from extra_views import ModelFormSetView, InlineFormSetView
from django.http import HttpResponse, Http404
from django.shortcuts import redirect
from django.utils import timezone
@@ -93,6 +94,7 @@ class EventDetailMixin(object):
class EventForm(PermissionRequiredMixin, generic.UpdateView):
form_class = forms.EventForm
template_name = 'events/event_form.html'
permission_required = 'events.add_event'
def get_context_data(self, **kwargs):
@@ -110,15 +112,28 @@ class EventForm(PermissionRequiredMixin, generic.UpdateView):
@param queryset:
"""
if self.kwargs.get('pk'):
event = models.Event.objects.get(pk=self.kwargs['pk'])
if event.event_series:
return event.event_series
else:
return event
return models.Event.objects.get(pk=self.kwargs['pk'])
else:
return models.Event()
class EventSeriesForm(EventDetailMixin, PermissionRequiredMixin, InlineFormSetView):
model = models.Event
inline_model = models.Event
fk_name = 'event_series'
fields = ('start', 'end')
form_class = forms.EventForm
extra = 3
permission_required = 'events.add_event'
template_name = 'events/eventseries_form.html'
def get_object(self, queryset=None):
self.event = models.Event.objects.get(pk=self.kwargs['pk'])
if self.event.event_series:
self.event = self.event.event_series
return self.event
class EventGallery(generic.ListView):
template_name = 'events/photo_gallery.html'
queryset = models.Event.objects.filter(start__lt=timezone.now(),