followup legacy from seasonable
This commit is contained in:
parent
2629d3ade7
commit
b200e2d3ed
|
@ -22,7 +22,14 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="form-group row ">
|
||||
<label for="id_information" class="col-4 col-sm-2 col-md-2 col-lg-2 col-xl-2 col-form-label">Informations</label>
|
||||
<label for="id_date" class="col-4 col-sm-2 col-md-2 col-lg-2 col-xl-2 col-form-label">Date <span class="text-danger"><b>*</b></span></label>
|
||||
<div class="col-8 col-sm-6 col-md-4 col-lg-4 col-xl-4 {% if form.date.errors %}has-danger{% endif %}">
|
||||
{{ form.date }}
|
||||
{% if form.date.errors %}<span class="btn btn-sm btn-danger-outline">{% for error in form.date.errors %}{{error}}{% endfor %}</span>{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row ">
|
||||
<label for="id_information" class="col-4 col-sm-2 col-md-2 col-lg-2 col-xl-2 col-form-label">Informations <span class="text-danger"><b>*</b></span></label>
|
||||
<div class="col-8 col-sm-10 col-md-10 col-lg-10 col-xl-10 {% if form.id_informations.errors %}has-danger{% endif %}">
|
||||
{{ form.informations }}
|
||||
</div>
|
||||
|
|
|
@ -25,7 +25,7 @@ class ChronoAdmin(admin.ModelAdmin):
|
|||
model = Chrono
|
||||
|
||||
list_display = ("date", "gymnast", "tof", "chrono_type")
|
||||
readonly_fields = ('created_at', 'updated_at')
|
||||
readonly_fields = ('season', 'week_number', 'created_at', 'updated_at')
|
||||
list_filter = ("chrono_type",)
|
||||
autocomplete_fields = ("gymnast",)
|
||||
date_hierarchy = "date"
|
||||
|
@ -47,7 +47,7 @@ class LearnedSkillAdmin(admin.ModelAdmin):
|
|||
model = LearnedSkill
|
||||
|
||||
list_display = ("gymnast", "skill", "cando", "date")
|
||||
readonly_fields = ('created_at', 'updated_at')
|
||||
readonly_fields = ('season', 'week_number', 'created_at', 'updated_at')
|
||||
list_filter = (
|
||||
('gymnast', RelatedDropdownFilter),
|
||||
('skill', RelatedDropdownFilter),
|
||||
|
@ -89,7 +89,7 @@ class AccidentAdmin(admin.ModelAdmin):
|
|||
model = Accident
|
||||
|
||||
fields = ("date", "gymnast", "skill", "informations") # educative
|
||||
readonly_fields = ('created_at', 'updated_at')
|
||||
readonly_fields = ('season', 'week_number', 'created_at', 'updated_at')
|
||||
list_display = ("date", "gymnast", "skill") # educative
|
||||
list_filter = ("date",)
|
||||
date_hierarchy = "date"
|
||||
|
@ -101,7 +101,7 @@ class MindStateAdmin(admin.ModelAdmin):
|
|||
model = MindState
|
||||
|
||||
fields = ("gymnast", "date", "score", "informations")
|
||||
readonly_fields = ('created_at', 'updated_at')
|
||||
readonly_fields = ('season', 'week_number', 'created_at', 'updated_at')
|
||||
list_display = ("date", "gymnast", "score")
|
||||
list_filter = (
|
||||
"date",
|
||||
|
@ -156,7 +156,7 @@ class PlanAdmin(admin.ModelAdmin):
|
|||
model = Plan
|
||||
|
||||
list_display = ("gymnast", "date", "educative")
|
||||
readonly_fields = ('created_at', 'updated_at')
|
||||
readonly_fields = ('season', 'week_number', 'created_at', 'updated_at')
|
||||
list_filter = (
|
||||
('gymnast', RelatedDropdownFilter),
|
||||
('educative', RelatedDropdownFilter),
|
||||
|
@ -175,7 +175,7 @@ class NoteAdmin(admin.ModelAdmin):
|
|||
model = Note
|
||||
|
||||
list_display = ("gymnast", "coach")
|
||||
readonly_fields = ('created_at', 'updated_at')
|
||||
readonly_fields = ('season', 'week_number', 'created_at', 'updated_at')
|
||||
list_filter = (
|
||||
('gymnast', RelatedDropdownFilter),
|
||||
('coach', RelatedDropdownFilter),
|
||||
|
|
|
@ -484,11 +484,18 @@ class PlanForm(forms.ModelForm):
|
|||
class NoteForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = Note
|
||||
fields = ("gymnast", "coach", "status", "informations")
|
||||
fields = ("gymnast", "coach", "status", "informations", "date")
|
||||
widgets = {
|
||||
"gymnast": forms.HiddenInput(),
|
||||
"coach": forms.HiddenInput(),
|
||||
"status": forms.Select(attrs={"class": "form-control selectpicker"}),
|
||||
"date": forms.TextInput(
|
||||
attrs={
|
||||
"class": "form-control datepicker",
|
||||
"placeholder": date.today().strftime("%Y-%m-%d"),
|
||||
"value": date.today().strftime("%Y-%m-%d"),
|
||||
}
|
||||
),
|
||||
"informations": forms.Textarea(
|
||||
attrs={
|
||||
"class": "form-control",
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
# Generated by Django 4.1.1 on 2022-10-12 08:37
|
||||
|
||||
from django.db import migrations, models
|
||||
import ultron.tools.models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("followup", "0024_rename_note_type_note_status"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name="note",
|
||||
name="date",
|
||||
field=models.DateField(
|
||||
default=ultron.tools.models.get_default_date, verbose_name="Date"
|
||||
),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="note",
|
||||
name="season",
|
||||
field=models.CharField(default="2022-2023", max_length=9),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="note",
|
||||
name="week_number",
|
||||
field=models.PositiveSmallIntegerField(default=1),
|
||||
preserve_default=False,
|
||||
),
|
||||
]
|
|
@ -0,0 +1,23 @@
|
|||
# Generated by Django 4.1.1 on 2022-10-12 08:58
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("followup", "0025_note_date_note_season_note_week_number"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name="note",
|
||||
name="season",
|
||||
field=models.CharField(editable=False, max_length=9),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="note",
|
||||
name="week_number",
|
||||
field=models.PositiveSmallIntegerField(editable=False),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,147 @@
|
|||
# Generated by Django 4.1.1 on 2022-10-12 09:03
|
||||
|
||||
from django.db import migrations, models
|
||||
import ultron.tools.models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("followup", "0026_alter_note_season_alter_note_week_number"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name="accident",
|
||||
name="season",
|
||||
field=models.CharField(default="2022-2023", editable=False, max_length=9),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="accident",
|
||||
name="week_number",
|
||||
field=models.PositiveSmallIntegerField(default=1, editable=False),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="chrono",
|
||||
name="season",
|
||||
field=models.CharField(default="2022-2023", editable=False, max_length=9),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="chrono",
|
||||
name="week_number",
|
||||
field=models.PositiveSmallIntegerField(default=1, editable=False),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="heightweight",
|
||||
name="season",
|
||||
field=models.CharField(default="2022-2023", editable=False, max_length=9),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="heightweight",
|
||||
name="week_number",
|
||||
field=models.PositiveSmallIntegerField(default=1, editable=False),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="learnedskill",
|
||||
name="season",
|
||||
field=models.CharField(default="2022-2023", editable=False, max_length=9),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="learnedskill",
|
||||
name="week_number",
|
||||
field=models.PositiveSmallIntegerField(default=1, editable=False),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="mindstate",
|
||||
name="season",
|
||||
field=models.CharField(default="2022-2023", editable=False, max_length=9),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="mindstate",
|
||||
name="week_number",
|
||||
field=models.PositiveSmallIntegerField(default=1, editable=False),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="numberofroutinedone",
|
||||
name="season",
|
||||
field=models.CharField(default="2022-2023", editable=False, max_length=9),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="numberofroutinedone",
|
||||
name="week_number",
|
||||
field=models.PositiveSmallIntegerField(default=1, editable=False),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="plan",
|
||||
name="season",
|
||||
field=models.CharField(default="2022-2023", editable=False, max_length=9),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="plan",
|
||||
name="week_number",
|
||||
field=models.PositiveSmallIntegerField(default=1, editable=False),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="accident",
|
||||
name="date",
|
||||
field=models.DateField(
|
||||
default=ultron.tools.models.get_default_date, verbose_name="Date"
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="chrono",
|
||||
name="date",
|
||||
field=models.DateField(
|
||||
default=ultron.tools.models.get_default_date, verbose_name="Date"
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="heightweight",
|
||||
name="date",
|
||||
field=models.DateField(
|
||||
default=ultron.tools.models.get_default_date, verbose_name="Date"
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="learnedskill",
|
||||
name="date",
|
||||
field=models.DateField(
|
||||
default=ultron.tools.models.get_default_date, verbose_name="Date"
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="mindstate",
|
||||
name="date",
|
||||
field=models.DateField(
|
||||
default=ultron.tools.models.get_default_date, verbose_name="Date"
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="numberofroutinedone",
|
||||
name="date",
|
||||
field=models.DateField(
|
||||
default=ultron.tools.models.get_default_date, verbose_name="Date"
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="plan",
|
||||
name="date",
|
||||
field=models.DateField(
|
||||
default=ultron.tools.models.get_default_date, verbose_name="Date"
|
||||
),
|
||||
),
|
||||
]
|
|
@ -4,7 +4,7 @@ User = get_user_model()
|
|||
|
||||
from datetime import date
|
||||
|
||||
from ultron.tools.models import Markdownizable
|
||||
from ultron.tools.models import Markdownizable, Seasonisable
|
||||
from ultron.people.models import Gymnast
|
||||
from ultron.planning.models import Event
|
||||
from ultron.objective.models import Educative, Skill, Routine
|
||||
|
@ -30,7 +30,7 @@ CAN_DO_TYPE_CHOICES = (
|
|||
)
|
||||
|
||||
|
||||
class Chrono(models.Model):
|
||||
class Chrono(Seasonisable):
|
||||
"""
|
||||
Représente les chronos (de chandelles ou de série) enregistrés pour un(e) gymnaste.
|
||||
"""
|
||||
|
@ -68,7 +68,6 @@ class Chrono(models.Model):
|
|||
)
|
||||
score = models.DecimalField(max_digits=5, decimal_places=3)
|
||||
tof = models.DecimalField(max_digits=5, decimal_places=3, blank=True, null=True)
|
||||
date = models.DateField(default=date.today, verbose_name="Date")
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
updated_at = models.DateTimeField(auto_now=True)
|
||||
|
||||
|
@ -102,7 +101,7 @@ class ChronoDetails(models.Model):
|
|||
value = models.DecimalField(max_digits=5, decimal_places=3)
|
||||
|
||||
|
||||
class Accident(Markdownizable):
|
||||
class Accident(Markdownizable, Seasonisable):
|
||||
"""
|
||||
La classe `Accident` permet d'indiquer qu'un gymnaste a eu un accident, en liaison avec un
|
||||
skill ou non.
|
||||
|
@ -128,7 +127,6 @@ class Accident(Markdownizable):
|
|||
blank=True,
|
||||
null=True,
|
||||
)
|
||||
date = models.DateField(verbose_name="Date")
|
||||
nb_week_off = models.SmallIntegerField(
|
||||
blank=True, null=True, verbose_name="# week off"
|
||||
)
|
||||
|
@ -142,7 +140,7 @@ class Accident(Markdownizable):
|
|||
)
|
||||
|
||||
|
||||
class LearnedSkill(models.Model):
|
||||
class LearnedSkill(Seasonisable):
|
||||
"""
|
||||
Représente la capacité d'un gymnaste à savori faire un skill de la ligne d'apprentissage.
|
||||
"""
|
||||
|
@ -167,12 +165,11 @@ class LearnedSkill(models.Model):
|
|||
cando = models.PositiveSmallIntegerField(
|
||||
choices=CAN_DO_TYPE_CHOICES, verbose_name="Can do type"
|
||||
)
|
||||
date = models.DateField(default=date.today, verbose_name="Date")
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
updated_at = models.DateTimeField(auto_now=True)
|
||||
|
||||
|
||||
class Plan(models.Model):
|
||||
class Plan(Seasonisable):
|
||||
"""
|
||||
Classe représentant les objectifs qu'un gymnaste devra savoir faire pour une date donnée.
|
||||
"""
|
||||
|
@ -195,7 +192,6 @@ class Plan(models.Model):
|
|||
related_name="plan",
|
||||
on_delete=models.CASCADE,
|
||||
)
|
||||
date = models.DateField(default=date.today, verbose_name="Date")
|
||||
cando = models.PositiveSmallIntegerField(
|
||||
choices=CAN_DO_TYPE_CHOICES, verbose_name="Can do type", default=3
|
||||
)
|
||||
|
@ -243,7 +239,7 @@ class Point(models.Model):
|
|||
)
|
||||
|
||||
|
||||
class MindState(Markdownizable):
|
||||
class MindState(Markdownizable, Seasonisable):
|
||||
"""
|
||||
Représente l'état d'esprit psychologique d'un gymnaste
|
||||
"""
|
||||
|
@ -251,7 +247,6 @@ class MindState(Markdownizable):
|
|||
gymnast = models.ForeignKey(
|
||||
Gymnast, on_delete=models.CASCADE, default=None, related_name="mindstate"
|
||||
)
|
||||
date = models.DateField(default=date.today, verbose_name="Date")
|
||||
event = models.ForeignKey(
|
||||
Event,
|
||||
on_delete=models.SET_NULL,
|
||||
|
@ -302,7 +297,7 @@ class GymnastHasRoutine(models.Model):
|
|||
return "%s - %s : %s" % (self.gymnast, self.routine_type, self.routine)
|
||||
|
||||
|
||||
class NumberOfRoutineDone(models.Model):
|
||||
class NumberOfRoutineDone(Seasonisable):
|
||||
"""
|
||||
Classe permettant de suivre le nombre de séries faites par le gymnaste.
|
||||
"""
|
||||
|
@ -332,7 +327,6 @@ class NumberOfRoutineDone(models.Model):
|
|||
number_of_successes = models.PositiveSmallIntegerField(
|
||||
verbose_name="number of successes", default=0
|
||||
)
|
||||
date = models.DateField(default=date.today, verbose_name="Date")
|
||||
|
||||
def __str__(self):
|
||||
return "%s - %s (%s) : %s | %s" % (
|
||||
|
@ -344,7 +338,7 @@ class NumberOfRoutineDone(models.Model):
|
|||
)
|
||||
|
||||
|
||||
class HeightWeight(models.Model):
|
||||
class HeightWeight(Seasonisable):
|
||||
"""
|
||||
Classe permettant de suivre le poids et la taille d'un gymnaste
|
||||
"""
|
||||
|
@ -363,13 +357,12 @@ class HeightWeight(models.Model):
|
|||
height = models.DecimalField(max_digits=4, decimal_places=1, verbose_name="Height")
|
||||
hips_height = models.DecimalField(max_digits=4, decimal_places=1, verbose_name="Hips height")
|
||||
weight = models.DecimalField(max_digits=4, decimal_places=1, verbose_name="Weight")
|
||||
date = models.DateField(default=date.today, verbose_name="Date")
|
||||
|
||||
def __str__(self):
|
||||
return "%s : %s/%s - %s" % (self.gymnast, self.height, self.hips_height, self.weight)
|
||||
|
||||
|
||||
class Note(Markdownizable):
|
||||
class Note(Markdownizable, Seasonisable):
|
||||
"""
|
||||
Notes relatives à un gymnaste
|
||||
"""
|
||||
|
|
|
@ -160,8 +160,6 @@ def note_create_or_update(request, note_id=None, gymnast_id=None):
|
|||
data["gymnast"] = gymnast_id
|
||||
data["gymnast_related"] = str(gymnast)
|
||||
|
||||
# print(data)
|
||||
|
||||
if request.method == "POST":
|
||||
form = NoteForm(request.POST, instance=note)
|
||||
|
||||
|
|
|
@ -126,6 +126,8 @@ def from_date_to_week_number(the_date=None):
|
|||
|
||||
if the_date is None:
|
||||
the_date = pendulum.today().date()
|
||||
else:
|
||||
the_date = pendulum.parse(the_date.strftime("%Y%m%d"))
|
||||
|
||||
number_of_year_week = the_date.week_of_year
|
||||
if the_date.month >= 9: # nouvelle saison
|
||||
|
|
|
@ -11,21 +11,27 @@ from .date_week_transition import (
|
|||
import markdown
|
||||
import pendulum
|
||||
|
||||
|
||||
def get_default_date():
|
||||
return pendulum.now().date()
|
||||
|
||||
|
||||
class Seasonisable(models.Model):
|
||||
""" """
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
date = models.DateField(default=pendulum.now().date, verbose_name="Date")
|
||||
season = models.CharField(max_length=9)
|
||||
week_number = models.PositiveSmallIntegerField()
|
||||
date = models.DateField(default=get_default_date, verbose_name="Date")
|
||||
season = models.CharField(max_length=9, editable=False)
|
||||
week_number = models.PositiveSmallIntegerField(editable=False)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
""" Calcule les valeurs `season` et `week_number` sur base d'une date lors de l'
|
||||
enregistrement d'un object enfant.
|
||||
"""
|
||||
if self.date is not None:
|
||||
self.season, self.week_number = from_date_to_week_number(self.date)
|
||||
if self.date is None:
|
||||
self.date = get_default_date()
|
||||
self.season, self.week_number = from_date_to_week_number(self.date)
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue