forked from DGNum/gestioCOF
Add notif time
In case of a gestioCOF bug, we keep the notification time in memory to still do the drawing 1-3 days after.
This commit is contained in:
parent
684603709e
commit
6a6549e0d7
5 changed files with 61 additions and 20 deletions
|
@ -225,7 +225,7 @@ class SpectacleReventeAdminForm(forms.ModelForm):
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
self.fields['answered_mail'].queryset = (
|
self.fields['confirmed_entry'].queryset = (
|
||||||
Participant.objects
|
Participant.objects
|
||||||
.select_related('user', 'tirage')
|
.select_related('user', 'tirage')
|
||||||
)
|
)
|
||||||
|
@ -292,8 +292,8 @@ class SpectacleReventeAdmin(admin.ModelAdmin):
|
||||||
revente.soldTo = None
|
revente.soldTo = None
|
||||||
revente.notif_sent = False
|
revente.notif_sent = False
|
||||||
revente.tirage_done = False
|
revente.tirage_done = False
|
||||||
if revente.answered_mail:
|
if revente.confirmed_entry:
|
||||||
revente.answered_mail.clear()
|
revente.confirmed_entry.clear()
|
||||||
revente.save()
|
revente.save()
|
||||||
self.message_user(
|
self.message_user(
|
||||||
request,
|
request,
|
||||||
|
|
|
@ -110,7 +110,7 @@ class ReventeTirageAnnulForm(forms.Form):
|
||||||
def __init__(self, participant, *args, **kwargs):
|
def __init__(self, participant, *args, **kwargs):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
self.fields['reventes'].queryset = (
|
self.fields['reventes'].queryset = (
|
||||||
participant.wanted.filter(soldTo__isnull=True)
|
participant.entered.filter(soldTo__isnull=True)
|
||||||
.select_related('attribution__spectacle')
|
.select_related('attribution__spectacle')
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -130,7 +130,7 @@ class ReventeTirageForm(forms.Form):
|
||||||
notif_sent=True,
|
notif_sent=True,
|
||||||
shotgun=False,
|
shotgun=False,
|
||||||
tirage_done=False
|
tirage_done=False
|
||||||
).exclude(answered_mail=participant)
|
).exclude(confirmed_entry=participant)
|
||||||
.select_related('attribution__spectacle')
|
.select_related('attribution__spectacle')
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
28
bda/migrations/0012_notif_time.py
Normal file
28
bda/migrations/0012_notif_time.py
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('bda', '0011_tirage_appear_catalogue'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='spectaclerevente',
|
||||||
|
name='answered_mail',
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='spectaclerevente',
|
||||||
|
name='confirmed_entry',
|
||||||
|
field=models.ManyToManyField(blank=True, related_name='entered', to='bda.Participant'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='spectaclerevente',
|
||||||
|
name='notif_time',
|
||||||
|
field=models.DateTimeField(blank=True, verbose_name="Moment d'envoi de la notification", null=True),
|
||||||
|
),
|
||||||
|
]
|
|
@ -218,9 +218,9 @@ class SpectacleRevente(models.Model):
|
||||||
related_name="revente")
|
related_name="revente")
|
||||||
date = models.DateTimeField("Date de mise en vente",
|
date = models.DateTimeField("Date de mise en vente",
|
||||||
default=timezone.now)
|
default=timezone.now)
|
||||||
answered_mail = models.ManyToManyField(Participant,
|
confirmed_entry = models.ManyToManyField(Participant,
|
||||||
related_name="wanted",
|
related_name="entered",
|
||||||
blank=True)
|
blank=True)
|
||||||
seller = models.ForeignKey(Participant,
|
seller = models.ForeignKey(Participant,
|
||||||
related_name="original_shows",
|
related_name="original_shows",
|
||||||
verbose_name="Vendeur")
|
verbose_name="Vendeur")
|
||||||
|
@ -229,8 +229,13 @@ class SpectacleRevente(models.Model):
|
||||||
|
|
||||||
notif_sent = models.BooleanField("Notification envoyée",
|
notif_sent = models.BooleanField("Notification envoyée",
|
||||||
default=False)
|
default=False)
|
||||||
|
|
||||||
|
notif_time = models.DateTimeField("Moment d'envoi de la notification",
|
||||||
|
blank=True, null=True)
|
||||||
|
|
||||||
tirage_done = models.BooleanField("Tirage effectué",
|
tirage_done = models.BooleanField("Tirage effectué",
|
||||||
default=False)
|
default=False)
|
||||||
|
|
||||||
shotgun = models.BooleanField("Disponible immédiatement",
|
shotgun = models.BooleanField("Disponible immédiatement",
|
||||||
default=False)
|
default=False)
|
||||||
####
|
####
|
||||||
|
@ -248,17 +253,23 @@ class SpectacleRevente(models.Model):
|
||||||
max_wait_time = timedelta(days=3)
|
max_wait_time = timedelta(days=3)
|
||||||
min_wait_time = timedelta(days=1)
|
min_wait_time = timedelta(days=1)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def real_notif_time(self):
|
||||||
|
if self.notif_time:
|
||||||
|
return self.notif_time
|
||||||
|
else:
|
||||||
|
return self.date + self.remorse_time
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def date_tirage(self):
|
def date_tirage(self):
|
||||||
"""Renvoie la date du tirage au sort de la revente."""
|
"""Renvoie la date du tirage au sort de la revente."""
|
||||||
notif_time = self.date + self.remorse_time
|
|
||||||
|
|
||||||
remaining_time = (self.attribution.spectacle.date
|
remaining_time = (self.attribution.spectacle.date
|
||||||
- notif_time - self.min_margin)
|
- self.real_notif_time - self.min_margin)
|
||||||
|
|
||||||
delay = min(remaining_time, self.max_wait_time)
|
delay = min(remaining_time, self.max_wait_time)
|
||||||
|
|
||||||
return notif_time + delay
|
return self.real_notif_time + delay
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_urgent(self):
|
def is_urgent(self):
|
||||||
|
@ -285,7 +296,7 @@ class SpectacleRevente(models.Model):
|
||||||
"""Réinitialise la revente pour permettre une remise sur le marché"""
|
"""Réinitialise la revente pour permettre une remise sur le marché"""
|
||||||
self.seller = self.attribution.participant
|
self.seller = self.attribution.participant
|
||||||
self.date = timezone.now()
|
self.date = timezone.now()
|
||||||
self.answered_mail.clear()
|
self.confirmed_entry.clear()
|
||||||
self.soldTo = None
|
self.soldTo = None
|
||||||
self.notif_sent = False
|
self.notif_sent = False
|
||||||
self.tirage_done = False
|
self.tirage_done = False
|
||||||
|
@ -311,6 +322,7 @@ class SpectacleRevente(models.Model):
|
||||||
]
|
]
|
||||||
send_mass_custom_mail(datatuple)
|
send_mass_custom_mail(datatuple)
|
||||||
self.notif_sent = True
|
self.notif_sent = True
|
||||||
|
self.notif_time = timezone.now()
|
||||||
self.save()
|
self.save()
|
||||||
|
|
||||||
def mail_shotgun(self):
|
def mail_shotgun(self):
|
||||||
|
@ -332,6 +344,7 @@ class SpectacleRevente(models.Model):
|
||||||
]
|
]
|
||||||
send_mass_custom_mail(datatuple)
|
send_mass_custom_mail(datatuple)
|
||||||
self.notif_sent = True
|
self.notif_sent = True
|
||||||
|
self.notif_time = timezone.now()
|
||||||
# Flag inutile, sauf si l'horloge interne merde
|
# Flag inutile, sauf si l'horloge interne merde
|
||||||
self.tirage_done = True
|
self.tirage_done = True
|
||||||
self.shotgun = True
|
self.shotgun = True
|
||||||
|
@ -343,7 +356,7 @@ class SpectacleRevente(models.Model):
|
||||||
parmis les personnes intéressées par le spectacle. Les personnes sont
|
parmis les personnes intéressées par le spectacle. Les personnes sont
|
||||||
ensuites prévenues par mail du résultat du tirage.
|
ensuites prévenues par mail du résultat du tirage.
|
||||||
"""
|
"""
|
||||||
inscrits = list(self.answered_mail.all())
|
inscrits = list(self.confirmed_entry.all())
|
||||||
spectacle = self.attribution.spectacle
|
spectacle = self.attribution.spectacle
|
||||||
seller = self.seller
|
seller = self.seller
|
||||||
|
|
||||||
|
|
14
bda/views.py
14
bda/views.py
|
@ -420,8 +420,8 @@ def revente_manage(request, tirage_id):
|
||||||
revente.notif_sent = False
|
revente.notif_sent = False
|
||||||
revente.tirage_done = False
|
revente.tirage_done = False
|
||||||
revente.shotgun = False
|
revente.shotgun = False
|
||||||
if revente.answered_mail:
|
if revente.confirmed_entry:
|
||||||
revente.answered_mail.clear()
|
revente.confirmed_entry.clear()
|
||||||
revente.save()
|
revente.save()
|
||||||
|
|
||||||
overdue = participant.attribution_set.filter(
|
overdue = participant.attribution_set.filter(
|
||||||
|
@ -454,7 +454,7 @@ def revente_tirages(request, tirage_id):
|
||||||
sub = 0
|
sub = 0
|
||||||
reventes = subform.cleaned_data['reventes']
|
reventes = subform.cleaned_data['reventes']
|
||||||
for revente in reventes:
|
for revente in reventes:
|
||||||
revente.answered_mail.add(participant)
|
revente.confirmed_entry.add(participant)
|
||||||
sub += 1
|
sub += 1
|
||||||
if sub > 0:
|
if sub > 0:
|
||||||
plural = "s" if sub > 1 else ""
|
plural = "s" if sub > 1 else ""
|
||||||
|
@ -470,7 +470,7 @@ def revente_tirages(request, tirage_id):
|
||||||
unsub = 0
|
unsub = 0
|
||||||
reventes = annulform.cleaned_data['reventes']
|
reventes = annulform.cleaned_data['reventes']
|
||||||
for revente in reventes:
|
for revente in reventes:
|
||||||
revente.answered_mail.remove(participant)
|
revente.confirmed_entry.remove(participant)
|
||||||
unsub += 1
|
unsub += 1
|
||||||
if unsub > 0:
|
if unsub > 0:
|
||||||
plural = "s" if unsub > 1 else ""
|
plural = "s" if unsub > 1 else ""
|
||||||
|
@ -493,7 +493,7 @@ def revente_confirm(request, revente_id):
|
||||||
return render(request, "bda/revente/wrongtime.html",
|
return render(request, "bda/revente/wrongtime.html",
|
||||||
{"revente": revente})
|
{"revente": revente})
|
||||||
|
|
||||||
revente.answered_mail.add(participant)
|
revente.confirmed_entry.add(participant)
|
||||||
return render(request, "bda/revente/confirmed.html",
|
return render(request, "bda/revente/confirmed.html",
|
||||||
{"spectacle": revente.attribution.spectacle,
|
{"spectacle": revente.attribution.spectacle,
|
||||||
"date": revente.date_tirage})
|
"date": revente.date_tirage})
|
||||||
|
@ -526,12 +526,12 @@ def revente_subscribe(request, tirage_id):
|
||||||
# la revente ayant le moins d'inscrits
|
# la revente ayant le moins d'inscrits
|
||||||
min_resell = (
|
min_resell = (
|
||||||
qset.filter(shotgun=False)
|
qset.filter(shotgun=False)
|
||||||
.annotate(nb_subscribers=Count('answered_mail'))
|
.annotate(nb_subscribers=Count('confirmed_entry'))
|
||||||
.order_by('nb_subscribers')
|
.order_by('nb_subscribers')
|
||||||
.first()
|
.first()
|
||||||
)
|
)
|
||||||
if min_resell is not None:
|
if min_resell is not None:
|
||||||
min_resell.answered_mail.add(participant)
|
min_resell.confirmed_entry.add(participant)
|
||||||
inscrit_revente.append(spectacle)
|
inscrit_revente.append(spectacle)
|
||||||
success = True
|
success = True
|
||||||
else:
|
else:
|
||||||
|
|
Loading…
Add table
Reference in a new issue