diff --git a/apps/note/models/transactions.py b/apps/note/models/transactions.py index b204e623..ac236ffe 100644 --- a/apps/note/models/transactions.py +++ b/apps/note/models/transactions.py @@ -223,7 +223,8 @@ class Transaction(PolymorphicModel): # Check that the amounts stay between big integer bounds diff_source, diff_dest = self.validate() - if not self.source.is_active or not self.destination.is_active: + if not (hasattr(self, '_force_save') and self._force_save) \ + and (not self.source.is_active or not self.destination.is_active): raise ValidationError(_("The transaction can't be saved since the source note " "or the destination note is not active.")) @@ -271,7 +272,7 @@ class RecurrentTransaction(Transaction): ) def clean(self): - if self.template.destination != self.destination: + if self.template.destination != self.destination and not (hasattr(self, '_force_save') and self._force_save): raise ValidationError( _("The destination of this transaction must equal to the destination of the template.")) return super().clean() diff --git a/apps/note/signals.py b/apps/note/signals.py index 8c02b3a5..a04df634 100644 --- a/apps/note/signals.py +++ b/apps/note/signals.py @@ -43,4 +43,5 @@ def delete_transaction(instance, **_kwargs): """ if not hasattr(instance, "_no_signal"): instance.valid = False + instance._force_save = True instance.save() diff --git a/apps/scripts b/apps/scripts index dbe7bf65..8ec7d68a 160000 --- a/apps/scripts +++ b/apps/scripts @@ -1 +1 @@ -Subproject commit dbe7bf65917df40b0ce476f357d04726e20b406f +Subproject commit 8ec7d68a169c1072aec427925f3bf2fd54eab5a3 diff --git a/apps/treasury/models.py b/apps/treasury/models.py index 7782ebec..b2b2596c 100644 --- a/apps/treasury/models.py +++ b/apps/treasury/models.py @@ -381,9 +381,14 @@ class SogeCredit(models.Model): tr.valid = True tr.created_at = timezone.now() tr.save() - self.credit_transaction.valid = False - self.credit_transaction.reason += " (invalide)" - self.credit_transaction.save() + if self.credit_transaction: + # If the soge credit is deleted while the user is not validated yet, + # there is not credit transaction. + # There is a credit transaction iff the user declares that no bank account + # was opened after the validation of the account. + self.credit_transaction.valid = False + self.credit_transaction.reason += " (invalide)" + self.credit_transaction.save() super().delete(**kwargs) class Meta: