mirror of https://gitlab.crans.org/bde/nk20
Use a signal to prevent a user that the note balance is negative
This commit is contained in:
parent
d4e4ed580f
commit
ca7ad05746
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.db.models.signals import post_save, pre_delete
|
from django.db.models.signals import pre_delete, pre_save, post_save
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from . import signals
|
from . import signals
|
||||||
|
@ -17,6 +17,15 @@ class NoteConfig(AppConfig):
|
||||||
"""
|
"""
|
||||||
Define app internal signals to interact with other apps
|
Define app internal signals to interact with other apps
|
||||||
"""
|
"""
|
||||||
|
pre_save.connect(
|
||||||
|
signals.pre_save_note,
|
||||||
|
sender="note.noteuser",
|
||||||
|
)
|
||||||
|
pre_save.connect(
|
||||||
|
signals.pre_save_note,
|
||||||
|
sender="note.noteclub",
|
||||||
|
)
|
||||||
|
|
||||||
post_save.connect(
|
post_save.connect(
|
||||||
signals.save_user_note,
|
signals.save_user_note,
|
||||||
sender=settings.AUTH_USER_MODEL,
|
sender=settings.AUTH_USER_MODEL,
|
||||||
|
|
|
@ -159,20 +159,6 @@ class NoteUser(Note):
|
||||||
def pretty(self):
|
def pretty(self):
|
||||||
return _("%(user)s's note") % {'user': str(self.user)}
|
return _("%(user)s's note") % {'user': str(self.user)}
|
||||||
|
|
||||||
@transaction.atomic
|
|
||||||
def save(self, *args, **kwargs):
|
|
||||||
if self.pk and self.balance < 0:
|
|
||||||
old_note = NoteUser.objects.get(pk=self.pk)
|
|
||||||
super().save(*args, **kwargs)
|
|
||||||
if old_note.balance >= 0:
|
|
||||||
# Passage en négatif
|
|
||||||
self.last_negative = timezone.now()
|
|
||||||
self._force_save = True
|
|
||||||
self.save(*args, **kwargs)
|
|
||||||
self.send_mail_negative_balance()
|
|
||||||
else:
|
|
||||||
super().save(*args, **kwargs)
|
|
||||||
|
|
||||||
def send_mail_negative_balance(self):
|
def send_mail_negative_balance(self):
|
||||||
plain_text = render_to_string("note/mails/negative_balance.txt", dict(note=self))
|
plain_text = render_to_string("note/mails/negative_balance.txt", dict(note=self))
|
||||||
html = render_to_string("note/mails/negative_balance.html", dict(note=self))
|
html = render_to_string("note/mails/negative_balance.html", dict(note=self))
|
||||||
|
@ -201,20 +187,6 @@ class NoteClub(Note):
|
||||||
def pretty(self):
|
def pretty(self):
|
||||||
return _("Note of %(club)s club") % {'club': str(self.club)}
|
return _("Note of %(club)s club") % {'club': str(self.club)}
|
||||||
|
|
||||||
@transaction.atomic
|
|
||||||
def save(self, *args, **kwargs):
|
|
||||||
if self.pk and self.balance < 0:
|
|
||||||
old_note = NoteClub.objects.get(pk=self.pk)
|
|
||||||
super().save(*args, **kwargs)
|
|
||||||
if old_note.balance >= 0:
|
|
||||||
# Passage en négatif
|
|
||||||
self.last_negative = timezone.now()
|
|
||||||
self._force_save = True
|
|
||||||
self.save(*args, **kwargs)
|
|
||||||
self.send_mail_negative_balance()
|
|
||||||
else:
|
|
||||||
super().save(*args, **kwargs)
|
|
||||||
|
|
||||||
def send_mail_negative_balance(self):
|
def send_mail_negative_balance(self):
|
||||||
plain_text = render_to_string("note/mails/negative_balance.txt", dict(note=self))
|
plain_text = render_to_string("note/mails/negative_balance.txt", dict(note=self))
|
||||||
html = render_to_string("note/mails/negative_balance.html", dict(note=self))
|
html = render_to_string("note/mails/negative_balance.html", dict(note=self))
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
# Copyright (C) 2018-2020 by BDE ENS Paris-Saclay
|
# Copyright (C) 2018-2020 by BDE ENS Paris-Saclay
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
from django.utils import timezone
|
||||||
|
|
||||||
|
|
||||||
def save_user_note(instance, raw, **_kwargs):
|
def save_user_note(instance, raw, **_kwargs):
|
||||||
"""
|
"""
|
||||||
|
@ -25,6 +27,16 @@ def save_club_note(instance, raw, **_kwargs):
|
||||||
instance.note.save()
|
instance.note.save()
|
||||||
|
|
||||||
|
|
||||||
|
def pre_save_note(instance, raw, **_kwargs):
|
||||||
|
if not raw and instance.pk and not hasattr(instance, "_no_signal") and instance.balance < 0:
|
||||||
|
from note.models import Note
|
||||||
|
old_note = Note.objects.get(pk=instance.pk)
|
||||||
|
if old_note.balance >= 0:
|
||||||
|
# Passage en négatif
|
||||||
|
instance.last_negative = timezone.now()
|
||||||
|
instance.send_mail_negative_balance()
|
||||||
|
|
||||||
|
|
||||||
def delete_transaction(instance, **_kwargs):
|
def delete_transaction(instance, **_kwargs):
|
||||||
"""
|
"""
|
||||||
Whenever we want to delete a transaction (caution with this), we ensure the transaction is invalid first.
|
Whenever we want to delete a transaction (caution with this), we ensure the transaction is invalid first.
|
||||||
|
|
Loading…
Reference in New Issue