79 lines
2.7 KiB
Python
79 lines
2.7 KiB
Python
# -*- encoding: utf-8 -*-
|
|
|
|
"""
|
|
Created on 04.10.2011
|
|
|
|
@author: christian
|
|
"""
|
|
from django import forms
|
|
from django.contrib.auth import get_user_model
|
|
from django.utils.translation import ugettext as _
|
|
|
|
from events.models import Event
|
|
from . import models
|
|
|
|
USER_MODEL = get_user_model()
|
|
|
|
|
|
class HanchanForm(forms.ModelForm):
|
|
""" Form to add/edit mahjong hanchans, grouped with formsets. """
|
|
error_css_class = 'error'
|
|
required_css_class = 'required'
|
|
start = forms.SplitDateTimeField(label=_('start'), required=True)
|
|
|
|
class Meta(object):
|
|
""" Medadata for better usability of the HanchanForm """
|
|
model = models.Hanchan
|
|
fields = ('start',
|
|
'player1', 'player1_input_score',
|
|
'player2', 'player2_input_score',
|
|
'player3', 'player3_input_score',
|
|
'player4', 'player4_input_score',
|
|
'comment')
|
|
widgets = {
|
|
'event': forms.HiddenInput(),
|
|
'comment': forms.widgets.Textarea(attrs={'rows': 4, 'cols': 40})
|
|
}
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
""" Overwrites some standard widgets for better usability. """
|
|
super(HanchanForm, self).__init__(*args, **kwargs)
|
|
player_queryset = USER_MODEL.objects.filter(
|
|
is_active=True,
|
|
membership=True)
|
|
for i in range(1, 4):
|
|
player = 'player%d' % i
|
|
player_input_score = 'player%d_input_score' % i
|
|
self.fields[player_input_score].widget.attrs['size'] = 6
|
|
self.fields[player_input_score].widget.attrs['type'] = 'number'
|
|
self.fields[player].queryset = player_queryset
|
|
|
|
def is_valid(self):
|
|
ret = forms.Form.is_valid(self)
|
|
for field, errors in self.errors.items():
|
|
message = ", ".join(set(errors))
|
|
print(type(field), type(errors))
|
|
self.fields[field].widget.attrs.update({
|
|
'class': self.fields[field].widget.attrs.get('class', '') + ' error',
|
|
'title': message
|
|
})
|
|
return ret
|
|
|
|
|
|
class HanchanAdminForm(HanchanForm):
|
|
""" Extends the HanchanForm for users with admin privileges.
|
|
|
|
They are allowed to confirm/unconfirm Hanchans, this could be userful if
|
|
one games smells fishy and needs the opinion of an referee."""
|
|
|
|
class Meta(object):
|
|
""" Extend the formfields to add the confirmed checkbox. """
|
|
model = models.Hanchan
|
|
fields = HanchanForm.Meta.fields + ('confirmed',)
|
|
|
|
|
|
HanchanFormset = forms.inlineformset_factory(Event, models.Hanchan,
|
|
form=HanchanForm,
|
|
extra=1,
|
|
can_delete=True)
|