feat(benevalo): permettre aux engagé·es anonymes de voir et mettre à jour leurs bénévalos
Parent
ed6dd2e3ca
révision
e4c201638a
|
@ -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')
|
||||
|
||||
|
||||
|
|
|
@ -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'),
|
||||
),
|
||||
]
|
|
@ -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)
|
||||
|
||||
|
|
Chargement…
Référencer dans un nouveau ticket