#114 Close invoice only if amount_paid >= amount

Merged
jocelyn merged 1 commits from arlo/fix_95_close_invoice_if_completely_paid into FFDN/master 8 years ago
2 changed files with 17 additions and 1 deletions
  1. 1 1
      coin/billing/models.py
  2. 16 0
      coin/billing/tests.py

+ 1 - 1
coin/billing/models.py

@@ -300,7 +300,7 @@ def set_invoice_as_paid_if_needed(sender, instance, **kwargs):
     Lorsqu'un paiement est enregistré, vérifie si la facture est alors
     Lorsqu'un paiement est enregistré, vérifie si la facture est alors
     complétement payée. Dans ce cas elle passe en réglée
     complétement payée. Dans ce cas elle passe en réglée
     """
     """
-    if (instance.invoice.amount_paid >= instance.invoice.amount and
+    if (instance.invoice.amount_paid() >= instance.invoice.amount() and
             instance.invoice.status == 'open'):
             instance.invoice.status == 'open'):
         instance.invoice.status = 'closed'
         instance.invoice.status = 'closed'
         instance.invoice.save()
         instance.invoice.save()

+ 16 - 0
coin/billing/tests.py

@@ -135,6 +135,22 @@ class BillingInvoiceCreationTests(TestCase):
         
         
         self.assertEqual(invoice.amount(), 111)
         self.assertEqual(invoice.amount(), 111)
 
 
+    def test_invoice_partial_payment(self):
+        invoice = Invoice(member=self.member)
+        invoice.save()
+
+        invoice.details.create(label=self.offer.name,
+                               amount=100,
+                               offersubscription=self.subscription,
+                               period_from=datetime.date(2014, 1, 1),
+                               period_to=datetime.date(2014, 3, 31),
+                               tax=0)
+        self.assertEqual(invoice.status, 'open')
+        invoice.payments.create(payment_mean='cash', amount=10)
+        self.assertEqual(invoice.status, 'open')
+        invoice.payments.create(payment_mean='cash', amount=90)
+        self.assertEqual(invoice.status, 'closed')
+
     def test_invoice_amount_before_tax(self):
     def test_invoice_amount_before_tax(self):
         invoice = Invoice(member=self.member)
         invoice = Invoice(member=self.member)
         invoice.save()
         invoice.save()