diff --git a/web/settings.py b/web/settings.py
index 87464dcf..b9eb70b4 100644
--- a/web/settings.py
+++ b/web/settings.py
@@ -84,5 +84,6 @@
'web.tupa',
'django.contrib.admin',
'django.contrib.formtools',
- 'django.template'
+ 'django.template',
+ 'django.contrib.databrowse'
)
diff --git a/web/templates/tupa/index.html b/web/templates/tupa/index.html
index a5b752dd..0f567b74 100644
--- a/web/templates/tupa/index.html
+++ b/web/templates/tupa/index.html
@@ -3,12 +3,11 @@
Luo uusi kisa
Kisat:
-{% if latest_kisa_list %}
- {% for kisa in latest_kisa_list %}
+{% if object_list %}
+ {% for kisa in object_list %}
{{kisa.nimi}}
{% endfor %}
-
{% else %}
Ei määriteltyjä kisoja.
{% endif %}
diff --git a/web/templates/tupa/maarita.html b/web/templates/tupa/maarita.html
index 67b6fe36..b5e87e36 100644
--- a/web/templates/tupa/maarita.html
+++ b/web/templates/tupa/maarita.html
@@ -9,6 +9,7 @@ {{ heading }}
{% if forms %}
{% for form in forms%}
+ {{form.label}}
{{form}}
{% endfor%}
{% endif %}
diff --git a/web/tupa.db b/web/tupa.db
index 630d774a..222d8248 100755
Binary files a/web/tupa.db and b/web/tupa.db differ
diff --git a/web/tupa/apina.py b/web/tupa/apina.py
new file mode 100644
index 00000000..f552c47e
--- /dev/null
+++ b/web/tupa/apina.py
@@ -0,0 +1,71 @@
+
+from models import *
+from django.forms import ModelForm
+from django import forms
+
+class apina(ModelForm) :
+ nimi = forms.CharField()
+ def __init__(self,tehtava,*argv,**argkw) :
+ super(ModelForm,self).__init__(*argv,**argkw)
+ self.tehtava=tehtava
+ def tallenna(self):
+ kaava = super(ModelForm,self).save(commit=False)
+ kaava.tehtava = self.tehtava
+ kaava.nimi= self.cleaned_data['nimi']
+ return kaava
+ class Meta:
+ exclude = ('tehtava','kaava')
+ model = OsapisteKaava
+
+psChoices= (("p","pienin"),("s","suurin"))
+tyyppiChoices= (("piste","piste"),("aika","aika"))
+kerroinChoices =(("1.5","1.5 (pienin tulos saa parhaat)"),("0.5","0.5 (suurin tulos saa parhaat pisteet)"))
+
+class interpoloi(apina):
+ tyyppi = forms.ChoiceField(choices=tyyppiChoices)
+ jaettavat_pisteet = forms.FloatField()
+ kerroin = forms.ChoiceField(choices=kerroinChoices,widget=forms.RadioSelect)
+ def save(self):
+ kaava = self.tallenna()
+ maariteet = SyoteMaarite.objects.filter(tehtava=self.tehtava).filter(nimi="op_"+kaava.nimi)
+ maarite=None
+ if not maariteet :
+ maarite = SyoteMaarite()
+ else :
+ maarite = maaritteet[0]
+ maarite.nimi="op_"+kaava.nimi
+ maarite.tehtava = self.tehtava
+ maarite.tyyppi=self.cleaned_data['tyyppi']
+
+ maksimi=None
+ if self.cleaned_data['kerroin'] == "0.5" :
+ maksimi = "s"
+ elif self.cleaned_data['kerroin'] == "1.5" :
+ maksimi = "p"
+
+ kaava.kaava = "interpoloi(" +maarite.nimi +","
+ kaava.kaava = kaava.kaava + self.cleaned_data['kerroin']
+ kaava.kaava = kaava.kaava + ",med,"+ maksimi +"," + str(self.cleaned_data['jaettavat_pisteet']) + ")"
+ kaava.save()
+ maarite.save()
+
+class kisapiste(apina):
+ nimi = forms.CharField()
+ kuvaus = forms.CharField()
+
+ def save(self):
+ kaava = self.tallenna()
+ kaava.kaava = self.maarite.nimi
+ maariteet = SyoteMaarite.objects.filter(tehtava=self.tehtava).filter(nimi="op_"+kaava.nimi)
+ if not maariteet :
+ maarite = SyoteMaarite()
+ else :
+ maarite = maaritteet[0]
+ self.maarite.nimi="op_"+kaava.nimi
+ self.maarite.tehtava = self.tehtava
+ self.maarite.kali_vihje=self.cleaned_data['kuvaus']
+ self.maarite.tyyppi="piste"
+
+ kaava.save()
+ self.maarite.save()
+
diff --git a/web/tupa/formit.py b/web/tupa/formit.py
index ef3b6811..828cf09c 100644
--- a/web/tupa/formit.py
+++ b/web/tupa/formit.py
@@ -4,12 +4,25 @@
from models import *
from django.forms import ModelForm
from django.forms.models import inlineformset_factory
+from decimal import *
+import re
KaavaFormSet = inlineformset_factory(Tehtava,OsapisteKaava,extra=3 )
MaariteFormSet = inlineformset_factory(Tehtava,SyoteMaarite,extra=3 )
VartioFormSet = inlineformset_factory(Sarja,Vartio,extra=10,fields=('nro','nimi') )
SarjaFormSet = inlineformset_factory(Kisa,Sarja,extra=4 )
+#TehtavaForm
+def tupaform_factory(model,overrides,excludeFields=None,fields=None) :
+ class uusi(ModelForm) :
+ def __init__(self,post,instance=None,sarja=None) :
+
+ super(ModelForm,self).__init__(post,instance=instance)
+ def save(self):
+ pass
+ class Meta:
+ pass
+ return uusi
class TehtavaForm(ModelForm):
def __init__(self,post,instance=None,sarja=None) :
@@ -21,12 +34,13 @@ def save(self):
tehtava.save()
return tehtava
class Meta:
+ fields = ('nimi', 'jarjestysnro','kaava')
model = Tehtava
- fields = ('nimi', 'jarjestysnro','kaava')
class PisteSyoteForm(ModelForm):
arvo = forms.FloatField(required=False)
- def __init__(self,maarite=None,vartio=None,*argv,**argkw) :
+ def __init__(self,maarite,vartio,*argv,**argkw) :
+ self.arvo=forms.TimeField(required=False)
super(ModelForm,self).__init__(*argv,**argkw)
self.maarite=maarite
self.vartio=vartio
@@ -35,6 +49,7 @@ def save(self):
syote.maarite=self.maarite
syote.vartio=self.vartio
if self.cleaned_data['arvo'] :
+ syote.arvo = self.cleaned_data['arvo']
syote.save()
elif syote.id :
syote.delete()
@@ -42,6 +57,32 @@ class Meta:
exclude = ('maarite','vartio')
model = Syote
+class AikaSyoteForm(PisteSyoteForm) :
+ arvo=forms.CharField(required=False)
+ def clean_arvo(self):
+ arvo=self.cleaned_data['arvo']
+ haku = re.match(r"^(\d*):(\d*):(\d*)\Z",arvo)
+ if haku:
+ return str(int(haku.group(1))*60*60 + int(haku.group(2))*60 + int(haku.group(3)))
+ elif not arvo :
+ return arvo
+ else :
+ raise forms.ValidationError('Syota aikaa muodossa: (hh:mm:ss)')
+
+def SyoteForm(*argv,**argkw) :
+ if argv[0].tyyppi=="aika":
+ syotteet=Syote.objects.filter(maarite=argv[0]).filter(vartio=argv[1])
+ aikaVakio= None
+ if syotteet :
+ arvo = Decimal(syotteet[0].arvo)
+ h = divmod(arvo , 60*60)[0]
+ min = divmod(arvo , 60)[0]- h*60
+ sec = arvo - (h*60*60) - (min*60)
+ aikaVakio = str(h) +":"+str(min) +":"+str(sec)
+ return AikaSyoteForm(initial={ 'arvo': aikaVakio },*argv,**argkw)
+ else :
+ return PisteSyoteForm(*argv,**argkw)
+
class KisaForm(ModelForm):
class Meta:
model = Kisa
diff --git a/web/tupa/models.py b/web/tupa/models.py
index 52a0094c..56e92335 100644
--- a/web/tupa/models.py
+++ b/web/tupa/models.py
@@ -226,6 +226,7 @@ class Meta:
class OsapisteKaava(models.Model) :
#gen_dia_class OsapisteKaava
+ nimi = models.CharField(max_length=255)
kaava = models.CharField(max_length=255)
tehtava = models.ForeignKey(Tehtava)
diff --git a/web/tupa/tietokanta.dia b/web/tupa/tietokanta.dia
index 293e38de..add731aa 100644
Binary files a/web/tupa/tietokanta.dia and b/web/tupa/tietokanta.dia differ
diff --git a/web/tupa/views.py b/web/tupa/views.py
index 514068d7..2bdc9edd 100644
--- a/web/tupa/views.py
+++ b/web/tupa/views.py
@@ -12,10 +12,7 @@
import re
from formit import *
-
-def index(request):
- kisat = Kisa.objects.all()
- return render_to_response('tupa/index.html', {'latest_kisa_list': kisat })
+from apina import *
def kisa(request,kisa_nimi) :
kisa = get_object_or_404(Kisa, nimi=kisa_nimi)
@@ -107,6 +104,16 @@ def maaritaTehtava(request, kisa_nimi, tehtava_id=None, sarja_id=None):
tehtavaForm = TehtavaForm( posti,instance=tehtava,sarja=sarja )
if tehtavaForm.is_valid() :
tehtava=tehtavaForm.save()
+ # Osapiste
+ osaForm= kisapiste(tehtava, posti, prefix="osapiste")
+ if osaForm.is_valid() :
+ osaForm.save()
+ osaForm.label="Kisapiste generaatio:"
+ # Interpolointi
+ interForm= interpoloi(tehtava, posti, prefix="interpoloi")
+ if interForm.is_valid() :
+ interForm.save()
+ interForm.label="Interpolinti generaatio:"
# Määritteet
maariteFormit=MaariteFormSet(posti,instance=tehtava,prefix="maarite")
if maariteFormit.is_valid() :
@@ -125,8 +132,8 @@ def maaritaTehtava(request, kisa_nimi, tehtava_id=None, sarja_id=None):
return render_to_response('tupa/maarita.html',
{ 'heading' : "Maarita Tehtava" ,
'taakse' : "../../../" ,
- 'forms' : (tehtavaForm,) ,
- 'formsets' : ( maariteFormit,kaavaFormit,) })
+ 'forms' : (tehtavaForm,osaForm,interForm,) ,
+ 'formsets' : ( maariteFormit,kaavaFormit,)})
def syotaKisa(request, kisa_nimi):
sarjat = Sarja.objects.filter(kisa__nimi=kisa_nimi)
@@ -159,7 +166,7 @@ def syotaTehtava(request, kisa_nimi , tehtava_id) :
formi=None
if syotteet:
syote=syotteet[0]
- formi = PisteSyoteForm(m,v,posti,instance=syote,prefix=v.nimi+m.nimi,)
+ formi = SyoteForm(m,v,posti,instance=syote,prefix=v.nimi+m.nimi,)
if formi.is_valid() :
formi.save()
diff --git a/web/tupa/views.pyc b/web/tupa/views.pyc
index 07b08e94..dee80118 100644
Binary files a/web/tupa/views.pyc and b/web/tupa/views.pyc differ
diff --git a/web/urls.py b/web/urls.py
index d91b72b9..0c27f3b0 100644
--- a/web/urls.py
+++ b/web/urls.py
@@ -1,10 +1,22 @@
from django.conf.urls.defaults import *
-
+from tupa.models import *
from django.contrib import admin
admin.autodiscover()
+from django.views.generic.simple import direct_to_template
+
+genericViews = patterns('django.views.generic.list_detail',
+ (r'^tupa/$','object_list', {'template_name': 'tupa/index.html', 'queryset': Kisa.objects.all() } ),)
+from django.contrib import databrowse
+
+databrowse.site.register(Kisa)
+databrowse.site.register(Sarja)
+databrowse.site.register(Tehtava)
+databrowse.site.register(SyoteMaarite)
+databrowse.site.register(Syote)
+databrowse.site.register(Vartio)
-urlpatterns = patterns('web.tupa.views.',
- (r'^tupa/$', 'index'),
+databrowse = patterns('',(r'^tupa/databrowse/(.*)', databrowse.site.root),)
+urlpatterns = genericViews + databrowse +patterns('web.tupa.views.',
(r'^tupa/admin/(.*)', admin.site.root ),
(r'^tupa/(?P\w+)/$', 'kisa'),
(r'^tupa/uusiKisa/maarita/$', 'maaritaKisa'),
@@ -17,5 +29,4 @@
(r'^tupa/(?P\w+)/syota/tehtava/(?P\d+)/$', 'syotaTehtava'),
(r'^tupa/(?P\w+)/tulosta/$', 'tulosta'),
(r'^tupa/(?P\w+)/tulosta/sarja/(?P\d+)/$', 'tulostaSarja'),
- (r'^tupa/(?P\w+)/tulosta/piirit/$', 'piirit'),
-)
+ (r'^tupa/(?P\w+)/tulosta/piirit/$', 'piirit'),)