feat(benevalo): permettre aux engagé·es anonymes de voir et mettre à jour leurs bénévalos

user_anonymized
Zoé Martin 2022-04-26 18:13:30 +02:00 commité par Antoine
Parent ed6dd2e3ca
révision e4c201638a
3 fichiers modifiés avec 62 ajouts et 6 suppressions

Voir le fichier

@ -446,15 +446,15 @@ class AssociatedEngagedBenevaloIndex(
def dispatch(self, request, *args, **kwargs):
if not self.association.can_manage_benevalos(
self.request.user
) or not self.association.can_self_list_benevalo(self.engagement.user):
) or not self.association.can_self_list_benevalo(self.request.user):
raise Http404
return super().dispatch(request, *args, **kwargs)
def get_title(self):
return "{} de {}".format(super().get_title(), self.engagement.user)
return "{} de {}".format(super().get_title(), self.request.user)
def add_create_tablebutton(self):
return self.association.is_engaged(self.engagement.user)
return self.association.is_engaged(self.request.user)
def get_create_url(self):
return reverse(
@ -465,13 +465,13 @@ class AssociatedEngagedBenevaloIndex(
return fa_icon(
'plus-circle',
"Saisir une action de bénévolat de {} pour {}".format(
self.engagement.user, self.association
self.request.user, self.association
),
)
def get_queryset(self):
return self.association.benevalo_set.by_user(
self.engagement.user
self.request.user
).order_by('-execution_date')

Voir le fichier

@ -0,0 +1,27 @@
# Generated by Django 3.2.12 on 2022-04-26 16:04
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('association', '0015_anonymousengagement'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('benevalo', '0005_validation_dates'),
]
operations = [
migrations.AddField(
model_name='benevalo',
name='visitor',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='association.anonymousengagement', verbose_name='bénévole anonyme'),
),
migrations.AlterField(
model_name='benevalo',
name='user',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='bénévole'),
),
]

Voir le fichier

@ -7,6 +7,7 @@ from django.db.models import Q
import reversion
from benevalibre.accounts.models import User
from benevalibre.association.models import AnonymousEngagement
from benevalibre.utils.validators import validate_after2k, validate_before1y
@ -18,10 +19,15 @@ class BenevaloQuerySet(models.QuerySet):
return self.filter(is_active=True)
def by_user(self, user):
if user.is_visitor:
return self.filter(visitor=user.visitor)
if user.is_anonymous:
return self.none()
return self.filter(user=user)
def viewable_by(self, user):
# En l'état un⋅e utilisat⋅eur⋅rice ne voit des autres que ce qu'il⋅elle
# peut gérer.
@ -79,7 +85,16 @@ class Benevalo(models.Model):
objects = BenevaloManager()
user = models.ForeignKey(
User, verbose_name="bénévole", on_delete=models.CASCADE
User,
verbose_name="bénévole",
on_delete=models.SET_NULL,
null=True,
)
visitor = models.ForeignKey(
AnonymousEngagement,
verbose_name="bénévole anonyme",
on_delete=models.SET_NULL,
null=True,
)
association = models.ForeignKey(
'association.Association',
@ -204,6 +219,20 @@ class Benevalo(models.Model):
)
)
if (
self.visitor_id
and not self.association.anonymousengagement_set
.filter(id=self.visitor_id, is_active=True)
.exists()
):
errors.append(
ValidationError(
"L'utilisat⋅eur⋅rice anonyme n'est pas un⋅e "
"bénévole de l'association. Veuillez choisir un⋅e "
"utilisat⋅eur⋅rice valide."
)
)
if errors:
raise ValidationError(errors)