diff --git a/apps/treasury/apps.py b/apps/treasury/apps.py index 96bab8a0..bc492aa7 100644 --- a/apps/treasury/apps.py +++ b/apps/treasury/apps.py @@ -2,9 +2,24 @@ # SPDX-License-Identifier: GPL-3.0-or-later from django.apps import AppConfig +from django.db.models.signals import post_save from django.utils.translation import gettext_lazy as _ class TreasuryConfig(AppConfig): name = 'treasury' verbose_name = _('Treasury') + + def ready(self): + """ + Define app internal signals to interact with other apps + """ + + from . import signals + from note.models import SpecialTransaction + from treasury.models import SpecialTransactionProxy + post_save.connect(signals.save_special_transaction, sender=SpecialTransaction) + + # If the treasury app was disabled, we ensure that each special transaction is linked to a proxy + for transaction in SpecialTransaction.objects.filter(specialtransactionproxy=None): + SpecialTransactionProxy.objects.create(transaction=transaction, remittance=None) diff --git a/apps/treasury/models.py b/apps/treasury/models.py index 359a3219..569fc07f 100644 --- a/apps/treasury/models.py +++ b/apps/treasury/models.py @@ -9,6 +9,10 @@ from note.models import NoteSpecial, SpecialTransaction class Invoice(models.Model): + """ + An invoice model that can generate a true invoice + """ + id = models.PositiveIntegerField( primary_key=True, verbose_name=_("Invoice identifier"), @@ -57,6 +61,10 @@ class Invoice(models.Model): class Product(models.Model): + """ + Product that appear on an invoice. + """ + invoice = models.ForeignKey( Invoice, on_delete=models.PROTECT, @@ -89,6 +97,10 @@ class Product(models.Model): class Remittance(models.Model): + """ + Treasurers want to regroup checks or bank transfers in bank remittances. + """ + date = models.DateTimeField( auto_now_add=True, verbose_name=_("Date"), @@ -132,6 +144,12 @@ class Remittance(models.Model): class SpecialTransactionProxy(models.Model): + """ + In order to keep modularity, we don't that the Note app depends on the treasury app. + That's why we create a proxy in this app, to link special transactions and remittances. + If it isn't very clean, that makes what we want. + """ + transaction = models.OneToOneField( SpecialTransaction, on_delete=models.CASCADE, diff --git a/apps/treasury/signals.py b/apps/treasury/signals.py new file mode 100644 index 00000000..e1183d6b --- /dev/null +++ b/apps/treasury/signals.py @@ -0,0 +1,12 @@ +# Copyright (C) 2018-2020 by BDE ENS Paris-Saclay +# SPDX-License-Identifier: GPL-3.0-or-later + +from treasury.models import SpecialTransactionProxy + + +def save_special_transaction(instance, created, **kwargs): + """ + When a special transaction is created, we create its linked proxy + """ + if created: + SpecialTransactionProxy.objects.create(transaction=instance, remittance=None).save()