[WIP] Reviews planning application

This commit is contained in:
Fred Pauchet 2020-10-20 11:47:36 +02:00
parent 8855348ef6
commit 0419a5e731
7 changed files with 71 additions and 54 deletions

View File

@ -1,6 +1,9 @@
# coding=UTF-8
"""Administration des plannings, évènements et saisons."""
from django.contrib import admin
from django_extensions.admin import ForeignKeyAutocompleteAdmin
from .models import (
EventType,
Event,
@ -14,19 +17,17 @@ from .models import (
Round,
PlanningLine,
)
from django_extensions.admin import ForeignKeyAutocompleteAdmin
def duplicate_record(modeladmin, request, queryset):
"""
Duplication de record sélectionner.
"""*Custom action* permettant de dupliquer plusieurs enregistrements.
"""
for object in queryset:
object.id = None
object.save()
duplicate_record.short_description = "Duplicate selected record"
duplicate_record.short_description = "Duplicate selected records"
class SeasonAdmin(admin.ModelAdmin):

View File

@ -1,11 +1,11 @@
# coding=UTF-8
from datetime import date
from django import forms
from datetime import date
from .models import Unavailability, Event, PlanningLine
from people.models import Gymnast
from django.contrib.admin.widgets import FilteredSelectMultiple
from people.models import Gymnast
from .models import Unavailability, Event, PlanningLine
class UnavailabilityForm(forms.ModelForm):
class Meta:

View File

@ -1,18 +1,23 @@
# coding=UTF-8
from django.db import models
from datetime import datetime, date, time, timedelta
from django.contrib.auth.models import User
from datetime import datetime, date, time
from base.models import Markdownizable
from django.db import models
from django.utils import timezone
from people.models import Gymnast
from location.models import Club
from datetime import datetime, timedelta
import pendulum
from base.models import Markdownizable
from location.models import Club
from people.models import Gymnast
def get_week(a_date):
"""
Remarks:
Je ne comprends pas trop cette fonction...
Tu pars d'une date, et tu récupères le lundi et le samedi de la semaine correspondant ?
"""
the_date = pendulum.parse(a_date)
day = the_date.weekday()
@ -33,6 +38,18 @@ def get_number_of_weeks_between(start, stop):
:param stop: date de fin de la période
:type stop: datetime.date
:return: Le nombre de semaines entre les deux dates.
Remarks:
Proposition d'utiliser isocalendar() sur une date.
L'indice 1 de la valeur de retour donne la semaine correspondant.
Eg.
>>> from datetime import date
>>> d = date(2020, 9, 27)
>>> d.isocalendar()
(2020, 39, 7)
-> Est-ce qu'il ne suffirait pas de faire la différence ?
"""
tmp = stop - start
@ -87,9 +104,8 @@ class TemporizableQuerySet(models.QuerySet):
class Temporizable(models.Model):
"""
Classe abstraite définissant deux dates (une da te de début, une date de
fin) et des méthodes de calculs sur base de ces dates.
"""Classe abstraite définissant une période comprise entre deux dates.
"""
class Meta:
@ -198,12 +214,13 @@ class EventType(models.Model):
class Event(Markdownizable, Temporizable):
"""
Classe représentant les évènements. Un évènement est caractèrisé par :
- un nom,
- un lieu (place),
- un type (compétition, démonstration, ),
- des gymnastes (participation prévue).
"""Classe représentant les évènements.
Un évènement est caractérisé par :
* un nom,
* un lieu (place),
* un type (compétition, démonstration, ),
* des gymnastes (participation prévue).
Je ne me rapelle plus à quoi sert le club.
"""
@ -257,14 +274,15 @@ class Event_Participation(models.Model):
class Course(Markdownizable, Temporizable):
"""
Classe représentant les cours. Un cours est défini par :
- une heure de début et une heure de fin,
- une date de début et une date de fin (un cours est considéré comme donné hebdromadairement entre
"""Classe représentant les cours.
Un cours est défini par :
* une heure de début et une heure de fin,
* une date de début et une date de fin (un cours est considéré comme donné hebdromadairement entre
ces deux dates) (hérite de la classe `Temporizable`)
- est associé à un ou plusieurs entraineurs,
- est associé à un club
- est associé à un jour de la semaine (numéro du jour dans la semaine : 0 = lundi, 6 = dimanche).
* est associé à un ou plusieurs entraineurs,
* est associé à un club
* est associé à un jour de la semaine (numéro du jour dans la semaine : 0 = lundi, 6 = dimanche).
"""
class Meta:
@ -319,8 +337,7 @@ class Course(Markdownizable, Temporizable):
class Group(models.Model):
"""
Classe représentant les groupes (Loisir, D1, D2, A, B, ).
"""Classe représentant les groupes (Loisir, D1, D2, A, B, …).
Un groupe appartient à un club.
"""
@ -343,10 +360,12 @@ class Group(models.Model):
class Subgroup(models.Model):
"""
Classe représentant les sous-groupes.
"""Classe représentant les sous-groupes.
Un sous-groupe appartient à un groupe (lui-même lié à un club). De la sorte, quand un gymnaste est mis dans un sous-groupe, en remontant via le groupe, nous pouvons connaître le(s) club(s) du gymnaste pour chaque saison.
Un sous-groupe appartient à un groupe (lui-même lié à un club).
De cette manière, quand un gymnaste est mis dans un sous-groupe, en remontant via le groupe,
nous pouvons connaître le(s) club(s) du gymnaste pour chaque saison.
"""
class Meta:
@ -367,8 +386,7 @@ class Subgroup(models.Model):
class UnavailabilityManager(models.Manager):
"""
Classe représentant le manager de la classe `Unavailability`.
"""Classe représentant le manager de la classe `Unavailability`.
"""
def next(self, count):
@ -379,8 +397,7 @@ class UnavailabilityManager(models.Manager):
class Unavailability(Markdownizable, Temporizable):
"""
Classe représentant les indisponibilités.
"""Classe représentant les indisponibilités.
"""
class Meta:
@ -405,10 +422,11 @@ class Unavailability(Markdownizable, Temporizable):
class Training(models.Model):
"""
Classe représentant les entraînements. Un entraînement est une occurence
d'un cours auquel sont présent des gymnastes pour une date donnée. Un objet
de cette classe lie donc un cours et un gymnaste à une date donnée.
"""Classe représentant les entraînements.
Un entraînement est une occurence d'un cours pendant lequel des gmnastes sont présents.
Un objet de cette classe lie donc un cours et un gymnaste à une date donnée.
"""
class Meta:
@ -441,9 +459,9 @@ class Training(models.Model):
class Round(Markdownizable):
"""
Classe représentant les passages des élèves lors d'un entrainement. Chaque record
représente un passage. Il est donc lié à un record de la classe `Training`.
"""Classe représentant les passages des élèves lors d'un entrainement.
Chaque record représente un passage. Il est donc lié à un record de la classe `Training`.
"""
class Meta:
@ -483,8 +501,7 @@ class Round(Markdownizable):
class PlanningLine(Markdownizable):
"""
Classe représentant les passages prévisionnels (incubating idea).
"""Classe représentant les passages prévisionnels (incubating idea).
"""
class Meta:

View File

View File

@ -1,12 +1,13 @@
# coding: utf-8
from datetime import datetime
from django.test import TestCase
from .models import get_number_of_weeks_between, Season
from ..models import get_number_of_weeks_between, Season
class TestUtils(TestCase):
def test_get_number_of_weeks(self):
"""Evalue le nombre de semaines qu'il y a entre deux dates.
"""
x = datetime(2016, 1, 1)
y = datetime(2016, 2, 5)
z = datetime(2016, 2, 4)

View File

@ -1,4 +1,3 @@
# coding=UTF-8
from django.urls import path, re_path

View File

@ -1,4 +1,3 @@
# coding=UTF-8
from django.shortcuts import render, get_object_or_404
from django.http import (