diff --git a/config/settings/base.py b/config/settings/base.py index 6197fec6..ca40a803 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -131,8 +131,7 @@ { "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", "OPTIONS": { - # TODO: passer à 12 - "min_length": 9, + "min_length": 12, }, }, { diff --git a/dora/orientations/admin.py b/dora/orientations/admin.py index 0b938e82..6775ccbb 100644 --- a/dora/orientations/admin.py +++ b/dora/orientations/admin.py @@ -32,6 +32,16 @@ class OrientationAdmin(admin.ModelAdmin): "prescriber_structure", "service", ) + readonly_fields = ("service", "di_service") + search_fields = ( + "beneficiary_last_name", + "beneficiary_email", + "referent_last_name", + "referent_email", + "original_service_name", + "di_structure_name", + "di_service_name", + ) date_hierarchy = "creation_date" ordering = ("-id",) readonly_fields = ("query_id", "query_expires_at", "original_service_name") diff --git a/dora/orientations/migrations/0010_orientation_check_valid_service.py b/dora/orientations/migrations/0010_orientation_check_valid_service.py new file mode 100644 index 00000000..27e75a3d --- /dev/null +++ b/dora/orientations/migrations/0010_orientation_check_valid_service.py @@ -0,0 +1,29 @@ +# Generated by Django 4.2.12 on 2024-07-15 16:53 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("orientations", "0009_orientation_query_expires_at_and_more"), + ] + + operations = [ + migrations.AddConstraint( + model_name="orientation", + constraint=models.CheckConstraint( + check=models.Q( + models.Q( + ("service", None), + models.Q(("di_service_id", ""), _negated=True), + ), + models.Q( + models.Q(("service", None), _negated=True), + ("di_service_id", ""), + ), + _connector="OR", + ), + name="check_valid_service", + ), + ), + ] diff --git a/dora/orientations/models.py b/dora/orientations/models.py index ff7643a4..555ca621 100644 --- a/dora/orientations/models.py +++ b/dora/orientations/models.py @@ -172,6 +172,18 @@ class Orientation(models.Model): ) last_reminder_email_sent = models.DateTimeField(blank=True, null=True) + class Meta: + constraints = ( + # service lié à l'orientation : DORA ou D·I, mais pas les deux + models.CheckConstraint( + check=( + (models.Q(service=None) & ~models.Q(di_service_id="")) + | (~models.Q(service=None) & models.Q(di_service_id="")) + ), + name="check_valid_service", + ), + ) + def save(self, *args, **kwargs): if not self.id: self.original_service_name = self.get_service_name() diff --git a/dora/structures/migrations/0071_structure_putative_members.py b/dora/structures/migrations/0071_structure_putative_members.py new file mode 100644 index 00000000..10a6cce1 --- /dev/null +++ b/dora/structures/migrations/0071_structure_putative_members.py @@ -0,0 +1,23 @@ +# Generated by Django 4.2.12 on 2024-07-15 13:45 + +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ("structures", "0070_alter_structure_phone"), + ] + + operations = [ + migrations.AddField( + model_name="structure", + name="putative_members", + field=models.ManyToManyField( + related_name="putative_structure_set", + through="structures.StructurePutativeMember", + to=settings.AUTH_USER_MODEL, + ), + ), + ] diff --git a/dora/structures/models.py b/dora/structures/models.py index b388c7ce..ace177af 100644 --- a/dora/structures/models.py +++ b/dora/structures/models.py @@ -278,6 +278,9 @@ class Structure(ModerationMixin, models.Model): data_inclusion_source = models.TextField(blank=True, db_index=True) members = models.ManyToManyField(User, through=StructureMember) + putative_members = models.ManyToManyField( + User, through=StructurePutativeMember, related_name="putative_structure_set" + ) disable_orientation_form = models.BooleanField(default=False) diff --git a/dora/users/apps.py b/dora/users/apps.py new file mode 100644 index 00000000..f9fac63a --- /dev/null +++ b/dora/users/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class UsersConfig(AppConfig): + name = "dora.users" + verbose_name = "utilisateurs"