diff --git a/khana/competition/admin.py b/khana/competition/admin.py index b1dd939..d25af5f 100644 --- a/khana/competition/admin.py +++ b/khana/competition/admin.py @@ -15,7 +15,6 @@ class PointAdmin(admin.ModelAdmin): "total", ) ordering = ("gymnast",) - # search_fields = ('longLabel', 'shortLabel') list_filter = ("gymnast", "event", "routine_type") diff --git a/khana/competition/models.py b/khana/competition/models.py index 1807939..f2ab637 100644 --- a/khana/competition/models.py +++ b/khana/competition/models.py @@ -1,4 +1,3 @@ -# coding=UTF-8 from django.db import models @@ -14,7 +13,6 @@ class Point(models.Model): "people.Gymnast", on_delete=models.CASCADE, default=None ) event = models.ForeignKey("planning.Event", on_delete=models.CASCADE, default=None) - # routine=models.ForeignKey('objective.Routine') routine_type = models.PositiveSmallIntegerField(choices=ROUTINETYPE_CHOICE) point_execution = models.DecimalField(max_digits=5, decimal_places=3) point_difficulty = models.DecimalField(max_digits=3, decimal_places=1) @@ -24,9 +22,8 @@ class Point(models.Model): total = models.DecimalField(max_digits=6, decimal_places=3) def __str__(self): - return "%s, %s - %s" % ( - self.gymnast.lastname, - self.gymnast.firstname, + return "%s - %s" % ( + self.gymnast, self.total, ) diff --git a/khana/competition/views.py b/khana/competition/views.py index 1c30f6f..e70b2a9 100644 --- a/khana/competition/views.py +++ b/khana/competition/views.py @@ -1,4 +1,3 @@ -# coding=UTF-8 from django.shortcuts import render, get_object_or_404 from django.contrib.auth.decorators import login_required @@ -6,9 +5,10 @@ from django.http import HttpResponse, HttpResponseRedirect from django.views.decorators.http import require_http_methods from django.db.models import Q +from khana.people.models import Gymnast + from .forms import ScoreForm from .models import Point -from people.models import Gymnast @login_required diff --git a/khana/location/views.py b/khana/location/views.py index cd92c35..7e5df54 100644 --- a/khana/location/views.py +++ b/khana/location/views.py @@ -1,34 +1,35 @@ -# coding=UTF-8 -from django.db.models import Q, Count -from django.shortcuts import render, get_object_or_404 -from django.template import RequestContext -from django.utils.html import format_html -from django.contrib.auth import authenticate, login as auth_login, logout as auth_logout -from django.http import HttpResponse, HttpResponseRedirect -from django.contrib.auth.decorators import login_required -from django.views.decorators.http import require_http_methods from datetime import datetime, timedelta, date from functools import reduce import operator import simplejson -from planning.models import ( +from django.contrib.auth import authenticate, login as auth_login, logout as auth_logout +from django.contrib.auth.decorators import login_required +from django.db.models import Q, Count +from django.http import HttpResponse, HttpResponseRedirect +from django.shortcuts import render, get_object_or_404 +from django.template import RequestContext +from django.utils.html import format_html +from django.views.decorators.http import require_http_methods + +from khana.planning.models import ( Event, Unavailability, Course, Subgroup, Training, -) # planning model -from people.models import Gymnast, Accident # people model +) +from khana.objective.models import Skill, Routine +from khana.people.models import Gymnast, Accident + from .models import ( Club, Place, Country, ) from .forms import PlaceForm -from objective.models import Skill, Routine # objective model def __diffTime(end, start): diff --git a/khana/main.py b/khana/main.py index 423d50b..05e4fca 100644 --- a/khana/main.py +++ b/khana/main.py @@ -1,7 +1,8 @@ + import math -from people.models import Gymnast -from objectives.models import Skill +from khana.people.models import Gymnast +from khana.objective.models import Skill def suggest_routine( @@ -22,7 +23,7 @@ def suggest_routine( logic (bool): indique si la série doit suivre certaines règles de logique (sportive). gymnast (gymnast): gymnaste. last_jump (skill): dernier saut sélectionné pour la série. - + Returns: ??? (list): liste des séries correspondantes aux criètres. """ @@ -58,16 +59,17 @@ def suggest_routine( for skill in skill_list: current_routine.append(skill) current_routine.append( - self.suggest_routine( - request, - total_difficulty_score - skill.difficulty, - max_difficulty_score, - routine_length - 1, - competition, - logic, - gymnast, - skill, - ) + None + # suggest_routine() + # request, + # total_difficulty_score - skill.difficulty, + # max_difficulty_score, + # routine_length - 1, + # competition, + # logic, + # gymnast, + # skill, + # ) ) current_routine.pop() # def knapSack(W, wt, val, n): diff --git a/khana/objective/admin.py b/khana/objective/admin.py index d84245c..af82f74 100644 --- a/khana/objective/admin.py +++ b/khana/objective/admin.py @@ -1,6 +1,6 @@ + from django.contrib import admin -# Register your models here. from .models import ( Educative, TouchPosition, @@ -30,10 +30,6 @@ def duplicate_skill(self, SkillAdmin, request, queryset): class SkillAdmin(ForeignKeyAutocompleteAdmin): model = Skill - # related_search_fields = { - # 'departure': ('label', 'short_label'), - # 'landing': ('label', 'short_label') - # } fields = ( "label", "short_label", @@ -66,7 +62,7 @@ class SkillAdmin(ForeignKeyAutocompleteAdmin): "age_boy", "age_girl", ) - # list_display = ('label', 'short_label', 'prerequisite') + ordering = ("label", "short_label") search_fields = ("rank", "label", "short_label") list_filter = ( @@ -127,10 +123,10 @@ class RoutineAdmin(admin.ModelAdmin): js = ("js/routine.js",) # TODO: ne proposer QUE les SKILL comme educatif - def get_related_filter(self, model, request): - # print('boum') - if not issubclass(model, Educative): - return super(Skill, self).get_related_filter(model, request) + # def get_related_filter(self, model, request): + # # print('boum') + # if not issubclass(model, Educative): + # return super(Skill, self).get_related_filter(model, request) class RoutineSkillAdmin(admin.ModelAdmin): diff --git a/khana/objective/models.py b/khana/objective/models.py index 8b617a2..59275e7 100644 --- a/khana/objective/models.py +++ b/khana/objective/models.py @@ -1,10 +1,13 @@ -# coding=UTF-8 from datetime import date + +from django.contrib.auth import get_user_model from django.db import models from django.db.models import Q + from khana.base.models import Markdownizable -from django.contrib.auth.models import User + +User = get_user_model() class Educative(Markdownizable): @@ -40,7 +43,7 @@ class Educative(Markdownizable): def __str__(self): return "%s - %s (level: %s | diff: %s)" % ( self.rank, - self.longLabel, + self.label, self.level, self.difficulty, ) @@ -62,7 +65,7 @@ class TouchPosition(models.Model): is_default = models.BooleanField(verbose_name="Défaut") def __str__(self): - return "%s" % (self.longLabel) + return "%s" % (self.label) def get_default_position(): diff --git a/khana/objective/tests.py b/khana/objective/tests.py index 366bc76..a15f839 100644 --- a/khana/objective/tests.py +++ b/khana/objective/tests.py @@ -1,9 +1,8 @@ -# coding=UTF-8 -from django.urls import reverse from django.test import TestCase, Client +from django.urls import reverse -from .models import Routine_Skill, Routine, Skill, TouchPosition +from .models import RoutineSkill, Routine, Skill, TouchPosition from .views import link_skill_to_routine @@ -51,4 +50,4 @@ class RoutineTest(TestCase): # print(response) self.assertEquals(response.status_code, 200) - self.assertTrue(Routine_Skill.objects.exists()) + self.assertTrue(RoutineSkill.objects.exists()) diff --git a/khana/objective/views.py b/khana/objective/views.py index dcc9a74..05da50b 100644 --- a/khana/objective/views.py +++ b/khana/objective/views.py @@ -1,26 +1,24 @@ -# coding=UTF-8 -from django.db.models import Q -from django.shortcuts import render, get_object_or_404 -from django.template import RequestContext -from django.http import HttpResponse, HttpResponseRedirect -from django.contrib.auth.decorators import login_required -from django.views.decorators.http import require_http_methods -from django.urls import reverse -from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger - -from django.views.decorators.clickjacking import xframe_options_exempt +from datetime import datetime +import math +import random import simplejson +from django.contrib.auth.decorators import login_required +from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger +from django.db.models import Q +from django.http import HttpResponse, HttpResponseRedirect +from django.shortcuts import render, get_object_or_404 +from django.template import RequestContext +from django.urls import reverse +from django.views.decorators.http import require_http_methods +from django.views.decorators.clickjacking import xframe_options_exempt + +from khana.people.models import Gymnast, CanDoRelation + from .models import Skill, Educative, Routine, Chrono, RoutineSkill from .forms import RoutineForm, ChronoForm -from people.models import Gymnast, CanDoRelation - -from datetime import datetime -import random - -import math def __lookup(lookup_class, lookup_value): @@ -30,7 +28,7 @@ def __lookup(lookup_class, lookup_value): :param lookup_class: classe fille dans laquelle la recherche doit être faite. - :type lookup_class: string (`skill` ou `routine`). + :type lookup_class: string (`skill` ou `routine`).ùpdem :param lookup_value: pattern de recherche. :type lookup_value: string. @@ -372,7 +370,7 @@ def __construct_routine( competition (bool): indique si la série doit respecter les règles de compétition. logic (bool): indique si la série doit suivre les règles de logique (sportive). gymnast (gymnast): gymnaste. - + Returns: ??? (list ?): liste des séries correspondantes aux criètres. """ @@ -471,7 +469,7 @@ def suggest_routine( logic (bool): indique si la série doit suivre les règles de logique (sportive). gymnast (gymnast): gymnaste. last_jump (skill): dernier saut sélectionné pour la série. - + Returns: ??? (list): liste des séries correspondantes aux criètres. diff --git a/khana/people/forms.py b/khana/people/forms.py index ab913be..ed83020 100644 --- a/khana/people/forms.py +++ b/khana/people/forms.py @@ -1,6 +1,7 @@ """Formulaires de gestion des données entrantes pour les gymnastes et accidents.""" from django import forms +from django.contrib.auth import get_user_model from .models import ( Accident, @@ -8,7 +9,7 @@ from .models import ( GymnastHasRoutine, ) -from django.contrib.auth.models import User +User = get_user_model() class AccidentForm(forms.ModelForm): diff --git a/khana/people/management/commands/superpowers.py b/khana/people/management/commands/superpowers.py deleted file mode 100644 index e95fc19..0000000 --- a/khana/people/management/commands/superpowers.py +++ /dev/null @@ -1,8 +0,0 @@ -from django.core.management.base import NoArgsCommand - - -class Command(NoArgsCommand): - help = 'Ecrit "et Bim !!!11"' - - def handle_noargs(self, **options): - print(" ET BIM !!!11") diff --git a/khana/people/models.py b/khana/people/models.py index c74e3d4..7751a65 100644 --- a/khana/people/models.py +++ b/khana/people/models.py @@ -44,13 +44,15 @@ Notes: from datetime import date -from django.contrib.auth.models import User +from django.contrib.auth import get_user_model from django.db import models import pendulum from khana.base.models import Markdownizable +User = get_user_model() + class Gymnast(Markdownizable): """Représente un gymnaste. @@ -207,9 +209,8 @@ class Accident(Markdownizable): date = models.DateField(verbose_name="Date") def __str__(self): - return "%s, %s (%s)" % ( - self.gymnast.lastname, - self.gymnast.firstname, + return "%s(%s)" % ( + self.gymnast, self.date, ) @@ -225,22 +226,6 @@ class CanDoRelation(models.Model): ordering = ["date", "educative", "gymnast"] unique_together = ("gymnast", "educative") - # TO_FRED : puis-je avoir ton avis là-dessus ? - # - # JE VAIS INDIQUER QUE DES ELEVES SAVENT FAIRE DES FIGURES (SKILL) - # - # - # QUESTIONS - # --------- - # - # 1) Cela ne dervait pas être deux relations ManyToMany dans chacune des tables GYMNAST et EDUCATIVE (ou SKILL) ? - # Un élève saura faire plusieurs figures. - # Et une figure pourra savoir être faite par plusieurs élèves... Donc, ? - # - # 2) Dans un premier temps, même si je l'appelle EDUCATIVE mon champs, pour être pérenne, - # je n'associerai QUE des figures à un élève. Je voudrais donc, dans l'admin, que mon champs - # ne soit populer qu'avec les éléments de la table SKILL et non pas tous les éléments de la - # table EDUCATIVE. gymnast = models.ForeignKey( Gymnast, verbose_name="Gymnast", @@ -256,9 +241,8 @@ class CanDoRelation(models.Model): date = models.DateField(default=date.today, verbose_name="Date") def __str__(self): - return "%s, %s - %s" % ( - self.gymnast.user.last_name, - self.gymnast.user.first_name, + return "%s - %s" % ( + self.gymnast, self.educative.shortLabel, ) @@ -295,10 +279,9 @@ class ToDoRelation(models.Model): date = models.DateField(default=date.today, verbose_name="Date") def __str__(self): - return "%s, %s - %s" % ( - self.gymnast.lastname, - self.gymnast.firstname, - self.educative.shortLabel, + return "%s - %s" % ( + self.gymnast, + self.educative.short_label, ) diff --git a/khana/people/templatetags/plannification.py b/khana/people/templatetags/plannification.py index d285dd6..41abadc 100644 --- a/khana/people/templatetags/plannification.py +++ b/khana/people/templatetags/plannification.py @@ -1,9 +1,8 @@ -# coding=utf-8 from django.shortcuts import get_object_or_404 from django import template -from khana.eople.models import Gymnast +from khana.people.models import Gymnast from khana.objective.models import Skill diff --git a/khana/people/views.py b/khana/people/views.py index 414f660..5575bed 100644 --- a/khana/people/views.py +++ b/khana/people/views.py @@ -1,10 +1,9 @@ -# coding=UTF-8 +from django.contrib.auth.decorators import login_required from django.db.models import Q, Count, Min +from django.http import HttpResponseRedirect, HttpResponse from django.shortcuts import render, get_object_or_404 from django.template import RequestContext -from django.http import HttpResponseRedirect, HttpResponse -from django.contrib.auth.decorators import login_required from django.views.decorators.http import require_http_methods from django.views.decorators.cache import cache_page @@ -13,10 +12,11 @@ import pendulum from .forms import AccidentForm, GymnastForm, GymnastHasRoutineForm, UserForm from .models import Gymnast, Accident, CanDoRelation -from planning.models import Event -from planning.views import suggest_program -from objective.models import Educative, Skill, Chrono -from competition.models import Point + +from khana.competition.models import Point +from khana.planning.models import Event +from khana.planning.views import suggest_program +from khana.objective.models import Educative, Skill, Chrono @login_required @@ -171,12 +171,12 @@ def gymnast_create_or_update(request, gymnastid=None): if request.method == "POST": user_form = UserForm(request.POST, instance=gymnast.user) - user_form["username"] = user_form["first_name"] + "_" + user_form["last_name"] + #user_form["username"] = user_form["first_name"] + "_" + user_form["last_name"] gymnast_form = GymnastForm(request.POST, instance=gymnast) if user_form.is_valid(): user = user_form.save() - gymnast_form["user"] = user + #gymnast_form["user"] = user if gymnast_form.is_valid(): gymnast = gymnast_form.save() diff --git a/khana/planning/forms.py b/khana/planning/forms.py index 89a80ae..b22a573 100644 --- a/khana/planning/forms.py +++ b/khana/planning/forms.py @@ -1,9 +1,10 @@ + from datetime import date from django import forms from django.contrib.admin.widgets import FilteredSelectMultiple -from people.models import Gymnast +from khana.people.models import Gymnast from .models import Unavailability, Event, PlanningLine diff --git a/khana/planning/models.py b/khana/planning/models.py index ddabf7e..40d9ca1 100644 --- a/khana/planning/models.py +++ b/khana/planning/models.py @@ -1,6 +1,6 @@ from datetime import datetime, date, time, timedelta -from django.contrib.auth.models import User +from django.contrib.auth import get_user_model from django.db import models from django.utils import timezone @@ -11,6 +11,9 @@ from khana.location.models import Club from khana.people.models import Gymnast +User = get_user_model() + + def get_week(a_date): """ diff --git a/khana/planning/views.py b/khana/planning/views.py index 72bc178..29db614 100644 --- a/khana/planning/views.py +++ b/khana/planning/views.py @@ -1,17 +1,20 @@ -from django.shortcuts import render, get_object_or_404 -from django.http import ( - HttpResponseRedirect, - HttpResponse, -) # <== TO_FRED : PQ C'EST LA CA ??? -from django.template import RequestContext + +from calendar import monthrange +from datetime import datetime, date, timedelta + +from django.core import serializers from django.contrib.auth.decorators import login_required +from django.db import connection +from django.db.models import Max, Min +from django.http import HttpResponseRedirect, HttpResponse +from django.template import RequestContext +from django.shortcuts import render, get_object_or_404 from django.utils import timezone from django.views.decorators.http import require_http_methods -from django.db.models import Max, Min -from django.core import serializers -from django.db import connection -from people.models import Gymnast, ToDoRelation +from khana.objective.models import Chrono, Skill +from khana.people.models import Gymnast, ToDoRelation, User + from .models import ( Season, Course, @@ -26,12 +29,9 @@ from .models import ( get_number_of_weeks_between, get_week, ) -from .forms import UnavailabilityForm, EventForm, PlanningLineForm -from people.models import User -from objective.models import Chrono, Skill -from calendar import monthrange -from datetime import datetime, date, timedelta +from .forms import UnavailabilityForm, EventForm, PlanningLineForm + import pendulum import simplejson @@ -81,6 +81,9 @@ def event_create_or_update(request, eventid=None): complètement le GET du POST. """ + if eventid: + event = get_object_or_404(Event, pk=eventid) + if request.method == "POST": form = EventForm(request.POST, instance=event) diff --git a/khana/profile/models.py b/khana/profile/models.py index 5e88b2d..5b0fa5c 100644 --- a/khana/profile/models.py +++ b/khana/profile/models.py @@ -7,10 +7,12 @@ Les profils peuvent enregistrer les informations suivantes: * si la barre de navigation doit être cachée ou non """ -from django.contrib.auth.models import User +from django.contrib.auth import get_user_model from django.db import models from django.dispatch import receiver +User = get_user_model() + class Profile(models.Model): """Classe étendant les informations des utilisateurs/entraineurs de l'application. diff --git a/khana/profile/views.py b/khana/profile/views.py index ef90c6b..cf09e96 100644 --- a/khana/profile/views.py +++ b/khana/profile/views.py @@ -1,7 +1,7 @@ """Vues de gestion des profils utilisateurs.""" from django.contrib.auth.decorators import login_required -from django.contrib.auth.models import User +from django.contrib.auth import get_user_model from django.db.models import Q from django.http import HttpResponseRedirect, HttpResponse from django.shortcuts import get_object_or_404, render @@ -12,6 +12,8 @@ import simplejson from .forms import ProfileForm from .models import Profile +User = get_user_model() + @login_required @require_http_methods(["GET"])