Gestion automatique de la scolarité
This commit is contained in:
parent
9004c802eb
commit
126bce9be3
4 changed files with 50 additions and 9 deletions
|
@ -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é'))
|
||||
|
|
32
avisstage/migrations/0006_auto_20210131_1954.py
Normal file
32
avisstage/migrations/0006_auto_20210131_1954.py
Normal file
|
@ -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'),
|
||||
),
|
||||
]
|
|
@ -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,9 +95,8 @@ 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()
|
||||
return
|
||||
|
||||
|
@ -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)
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
<p>Si vous êtes encore en scolarité, merci de vous <a href="{% url "authens:login.cas" %}">reconnecter en passant par le serveur d'authentification de l'ENS</a> pour mettre à jour votre statut.</p>
|
||||
{% endif %}
|
||||
<hr />
|
||||
<p><i>Le statut est mis à jour automatiquement chaque année selon le mode de connexion que vous utilisez.</i></p>
|
||||
<p><i>Le statut est mis à jour automatiquement tous les deux mois selon le mode de connexion que vous utilisez.</i></p>
|
||||
</section>
|
||||
<section class="profil">
|
||||
<h3>Connexion</h3>
|
||||
|
|
Loading…
Reference in a new issue