Browse Source

Handling deletion of payment

Alexandre Aubin 7 years ago
parent
commit
97fed35634
1 changed files with 18 additions and 1 deletions
  1. 18 1
      coin/billing/models.py

+ 18 - 1
coin/billing/models.py

@@ -13,7 +13,7 @@ from django.db import models, transaction
 from django.utils import timezone
 from django.utils.encoding import python_2_unicode_compatible
 from django.dispatch import receiver
-from django.db.models.signals import post_save
+from django.db.models.signals import post_save, post_delete
 from django.core.exceptions import ValidationError
 from django.core.urlresolvers import reverse
 
@@ -600,6 +600,23 @@ def invoice_changed(sender, instance, created, **kwargs):
                     % (instance.number, instance.member, instance.amount(), instance.amount_paid() ))
 
 
+@receiver(post_delete, sender=Payment)
+def payment_deleted(sender, instance, **kwargs):
+
+    accounting_log.info("Deleted payment %s (Date: %s, Member: %s, Amount: %s, Label: %s)."
+                        % (instance.pk, instance.date, instance.member,
+                            instance.amount, instance.label.encode('utf-8')))
+
+    member = instance.member
+
+    this_member_invoices = [i for i in member.invoices.filter(validated=True).order_by("date")]
+    this_member_payments = [p for p in member.payments.order_by("date")]
+
+    member.balance = compute_balance(this_member_invoices,
+                                     this_member_payments)
+    member.save()
+
+
 def test_accounting_update():
 
     Member.objects.all().delete()