From b200e2d3edc4483200a8b9f6df3e58a9163251a9 Mon Sep 17 00:00:00 2001 From: Gregory Trullemans Date: Wed, 12 Oct 2022 12:51:47 +0200 Subject: [PATCH] followup legacy from seasonable --- templates/followup/notes/create.html | 9 +- ultron/followup/admin.py | 12 +- ultron/followup/forms.py | 9 +- ..._note_date_note_season_note_week_number.py | 33 ++++ ...lter_note_season_alter_note_week_number.py | 23 +++ ...dent_week_number_chrono_season_and_more.py | 147 ++++++++++++++++++ ultron/followup/models.py | 25 ++- ultron/followup/views.py | 2 - ultron/tools/date_week_transition.py | 2 + ultron/tools/models.py | 16 +- 10 files changed, 247 insertions(+), 31 deletions(-) create mode 100644 ultron/followup/migrations/0025_note_date_note_season_note_week_number.py create mode 100644 ultron/followup/migrations/0026_alter_note_season_alter_note_week_number.py create mode 100644 ultron/followup/migrations/0027_accident_season_accident_week_number_chrono_season_and_more.py diff --git a/templates/followup/notes/create.html b/templates/followup/notes/create.html index 2f30e953cb..22087c6701 100644 --- a/templates/followup/notes/create.html +++ b/templates/followup/notes/create.html @@ -22,7 +22,14 @@
- + +
+ {{ form.date }} + {% if form.date.errors %}{% for error in form.date.errors %}{{error}}{% endfor %}{% endif %} +
+
+
+
{{ form.informations }}
diff --git a/ultron/followup/admin.py b/ultron/followup/admin.py index 8ea8f1cef7..404a524451 100644 --- a/ultron/followup/admin.py +++ b/ultron/followup/admin.py @@ -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), diff --git a/ultron/followup/forms.py b/ultron/followup/forms.py index 5832d79ad1..f8e20dd064 100644 --- a/ultron/followup/forms.py +++ b/ultron/followup/forms.py @@ -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", diff --git a/ultron/followup/migrations/0025_note_date_note_season_note_week_number.py b/ultron/followup/migrations/0025_note_date_note_season_note_week_number.py new file mode 100644 index 0000000000..01c5f031e9 --- /dev/null +++ b/ultron/followup/migrations/0025_note_date_note_season_note_week_number.py @@ -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, + ), + ] diff --git a/ultron/followup/migrations/0026_alter_note_season_alter_note_week_number.py b/ultron/followup/migrations/0026_alter_note_season_alter_note_week_number.py new file mode 100644 index 0000000000..8909491e1a --- /dev/null +++ b/ultron/followup/migrations/0026_alter_note_season_alter_note_week_number.py @@ -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), + ), + ] diff --git a/ultron/followup/migrations/0027_accident_season_accident_week_number_chrono_season_and_more.py b/ultron/followup/migrations/0027_accident_season_accident_week_number_chrono_season_and_more.py new file mode 100644 index 0000000000..f3915c3fd1 --- /dev/null +++ b/ultron/followup/migrations/0027_accident_season_accident_week_number_chrono_season_and_more.py @@ -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" + ), + ), + ] diff --git a/ultron/followup/models.py b/ultron/followup/models.py index 2a47ef1f5d..0f53e5b13b 100644 --- a/ultron/followup/models.py +++ b/ultron/followup/models.py @@ -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 """ diff --git a/ultron/followup/views.py b/ultron/followup/views.py index 4c9dfe61ff..93298242e7 100644 --- a/ultron/followup/views.py +++ b/ultron/followup/views.py @@ -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) diff --git a/ultron/tools/date_week_transition.py b/ultron/tools/date_week_transition.py index e7bec0526b..656d965c65 100644 --- a/ultron/tools/date_week_transition.py +++ b/ultron/tools/date_week_transition.py @@ -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 diff --git a/ultron/tools/models.py b/ultron/tools/models.py index 7f9ef9c54b..0e76419f22 100644 --- a/ultron/tools/models.py +++ b/ultron/tools/models.py @@ -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)