From 3551568de5fe362f86236f1ca3a23992ff950f31 Mon Sep 17 00:00:00 2001 From: Yohann D'ANELLO Date: Sun, 22 Mar 2020 17:29:31 +0100 Subject: [PATCH] Add remittance model --- apps/note/models/transactions.py | 8 +++++++ apps/treasury/models.py | 38 +++++++++++++++++++++++++++++++- 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/apps/note/models/transactions.py b/apps/note/models/transactions.py index 0e40edf6..6dbf3504 100644 --- a/apps/note/models/transactions.py +++ b/apps/note/models/transactions.py @@ -6,6 +6,7 @@ from django.urls import reverse from django.utils import timezone from django.utils.translation import gettext_lazy as _ from polymorphic.models import PolymorphicModel +from treasury.models import Remittance from .notes import Note, NoteClub, NoteSpecial @@ -209,6 +210,13 @@ class SpecialTransaction(Transaction): blank=True, ) + remittance = models.ForeignKey( + Remittance, + on_delete=models.PROTECT, + null=True, + verbose_name=_("Remittance"), + ) + @property def type(self): return _('Credit') if isinstance(self.source, NoteSpecial) else _("Debit") diff --git a/apps/treasury/models.py b/apps/treasury/models.py index 52caeb0b..7c634fdd 100644 --- a/apps/treasury/models.py +++ b/apps/treasury/models.py @@ -1,8 +1,10 @@ # Copyright (C) 2018-2020 by BDE ENS Paris-Saclay # SPDX-License-Identifier: GPL-3.0-or-later - +from django.core.exceptions import ValidationError from django.db import models +from django.db.models import Q from django.utils.translation import gettext_lazy as _ +from note.models import NoteSpecial class Invoice(models.Model): @@ -83,3 +85,37 @@ class Product(models.Model): @property def total_euros(self): return self.total / 100 + + +class Remittance(models.Model): + date = models.DateField( + auto_now_add=True, + verbose_name=_("Date"), + ) + + type = models.ForeignKey( + NoteSpecial, + on_delete=models.PROTECT, + verbose_name=_("Type"), + ) + + comment = models.CharField( + max_length=255, + verbose_name=_("Comment"), + ) + + @property + def size(self): + return self.specialtransaction_set.count() + + @property + def amount(self): + return sum(transaction.total for transaction in self.specialtransaction_set.all()) + + def full_clean(self, exclude=None, validate_unique=True): + ret = super().full_clean(exclude, validate_unique) + + if self.specialtransaction_set.filter(~Q(source=self.type)).exists(): + raise ValidationError("All transactions in a remittance must have the same type") + + return ret