From 126bce9be3544dda95f76f390102ec38755c742c Mon Sep 17 00:00:00 2001 From: Robin Champenois Date: Sun, 31 Jan 2021 22:53:59 +0100 Subject: [PATCH] =?UTF-8?q?Gestion=20automatique=20de=20la=20scolarit?= =?UTF-8?q?=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../management/commands/termine_scolarite.py | 6 +++- .../migrations/0006_auto_20210131_1954.py | 32 +++++++++++++++++++ avisstage/models.py | 19 +++++++---- avisstage/templates/avisstage/perso.html | 2 +- 4 files changed, 50 insertions(+), 9 deletions(-) create mode 100644 avisstage/migrations/0006_auto_20210131_1954.py diff --git a/avisstage/management/commands/termine_scolarite.py b/avisstage/management/commands/termine_scolarite.py index b2b2637..6779604 100644 --- a/avisstage/management/commands/termine_scolarite.py +++ b/avisstage/management/commands/termine_scolarite.py @@ -1,6 +1,9 @@ from django.core.management.base import BaseCommand, CommandError from avisstage.models import Normalien +from django.utils import timezone +from datetime import timedelta + class Command(BaseCommand): help = 'Réinitialise les statuts "en scolarité" de tout le monde' @@ -8,5 +11,6 @@ class Command(BaseCommand): return def handle(self, *args, **options): - Normalien.objects.all().update(en_scolarite=False) + old_conn = timezone.now() - timedelta(days=365) + Normalien.objects.all().update(last_cas_connect=t) self.stdout.write(self.style.SUCCESS(u'Terminé')) diff --git a/avisstage/migrations/0006_auto_20210131_1954.py b/avisstage/migrations/0006_auto_20210131_1954.py new file mode 100644 index 0000000..1ea3ac5 --- /dev/null +++ b/avisstage/migrations/0006_auto_20210131_1954.py @@ -0,0 +1,32 @@ +# Generated by Django 2.2.17 on 2021-01-31 18:54 + +import avisstage.models +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('avisstage', '0005_normalien_en_scolarite'), + ] + + operations = [ + migrations.RemoveField( + model_name='normalien', + name='en_scolarite', + ), + migrations.RemoveField( + model_name='normalien', + name='mail', + ), + migrations.AddField( + model_name='normalien', + name='last_cas_login', + field=models.DateField(default=avisstage.models._default_cas_login), + ), + migrations.AlterField( + model_name='normalien', + name='contactez_moi', + field=models.BooleanField(default=True, help_text='Affiche votre adresse e-mail principale sur votre profil public', verbose_name='Inviter les visiteurs à me contacter'), + ), + ] diff --git a/avisstage/models.py b/avisstage/models.py index 33661f8..44cda56 100644 --- a/avisstage/models.py +++ b/avisstage/models.py @@ -16,12 +16,17 @@ from tinymce.models import HTMLField as RichTextField from authens.signals import post_cas_connect from authens.models import CASAccount +from datetime import timedelta + from .utils import choices_length, is_email_ens from .statics import ( DEPARTEMENTS_DEFAUT, PAYS_OPTIONS, TYPE_LIEU_OPTIONS, TYPE_STAGE_OPTIONS, TYPE_LIEU_DICT, TYPE_STAGE_DICT, NIVEAU_SCOL_OPTIONS, NIVEAU_SCOL_DICT ) +def _default_cas_login(): + return (timezone.now()-timedelta(days=365)).date() + # # Profil Normalien (extension du modèle User) # @@ -33,13 +38,11 @@ class Normalien(models.Model): # Infos spécifiques nom = models.CharField(u"Nom complet", max_length=255, blank=True) promotion = models.CharField(u"Promotion", max_length=40, blank=True) - mail = models.EmailField(u"Adresse e-mail permanente", - max_length=200, blank=True) contactez_moi = models.BooleanField( u"Inviter les visiteurs à me contacter", default=True, help_text="Affiche votre adresse e-mail principale sur votre profil public") bio = models.TextField(u"À propos de moi", blank=True, default="") - en_scolarite = models.BooleanField(default=False, blank=True) + last_cas_login = models.DateField(default=_default_cas_login) class Meta: verbose_name = u"Profil élève" @@ -66,6 +69,10 @@ class Normalien(models.Model): return self.nom return self.user.username + @property + def en_scolarite(self): + return self.last_cas_login > (timezone.now() - timedelta(days=60)).date() + @property def preferred_email(self): return self.user.email @@ -88,10 +95,9 @@ post_save.connect(create_basic_user_profile, sender=User) def handle_cas_connection(sender, instance, created, cas_login, attributes, **kwargs): profil, created = Normalien.objects.get_or_create(user=instance) + profil.last_cas_login = timezone.now().date() if not created: - if not profil.en_scolarite: - profil.en_scolarite = True - profil.save() + profil.save() return dirs = attributes.get("homeDirectory", "").split("/") @@ -107,7 +113,6 @@ def handle_cas_connection(sender, instance, created, cas_login, attributes, **kw profil.promotion = "%s %s" % (dep, year) profil.nom = attributes.get("name", "") - profil.en_scolarite = True profil.save() post_cas_connect.connect(handle_cas_connection, sender=User) diff --git a/avisstage/templates/avisstage/perso.html b/avisstage/templates/avisstage/perso.html index 32f816f..b6f15e4 100644 --- a/avisstage/templates/avisstage/perso.html +++ b/avisstage/templates/avisstage/perso.html @@ -21,7 +21,7 @@

Si vous êtes encore en scolarité, merci de vous reconnecter en passant par le serveur d'authentification de l'ENS pour mettre à jour votre statut.

{% endif %}
-

Le statut est mis à jour automatiquement chaque année selon le mode de connexion que vous utilisez.

+

Le statut est mis à jour automatiquement tous les deux mois selon le mode de connexion que vous utilisez.

Connexion