Automatically link SpecialTransactions and their proxies

This commit is contained in:
Yohann D'ANELLO 2020-03-23 21:30:57 +01:00
parent 884a7d0f08
commit cf45b08c5b
3 changed files with 45 additions and 0 deletions

View File

@ -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)

View File

@ -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,

12
apps/treasury/signals.py Normal file
View File

@ -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()