Browse Source

Add non billable possibility to offers. So charge_subscription don't automatically charge corresponding subscriptions. (eg. ILLYSE infra offers)

Fabs 10 years ago
parent
commit
9d281f578f

+ 4 - 0
coin/billing/create_subscriptions_invoices.py

@@ -56,6 +56,10 @@ def create_member_invoice_for_a_period(member, date):
         # Récupère l'offre de l'abonnement
         offer = offer_subscription.offer
 
+        # Si l'offre n'est pas facturable, ne la prend pas en compte
+        if offer.non_billable:
+            continue
+
         # Vérifie s'il s'agit de la première facture d'un abonnement,
         # Alors facture en plus les frais de mise en service
         invoicedetail_test_first = InvoiceDetail.objects.filter(

+ 25 - 0
coin/billing/tests.py

@@ -111,6 +111,31 @@ class BillingInvoiceCreationTests(TestCase):
         self.assertEqual(invoice_test_2.details.first().period_to,
                          datetime.date(2014, 5, 31))
 
+    def test_non_billable_offer_isnt_charged(self):
+        """
+        Test qu'une offre non facturable n'est pas prise en compte
+        """
+        # Créé une offre non facturable
+        offer = Offer(name='Offre', billing_period=3, period_fees=30,
+                           initial_fees=50, non_billable=True)
+        offer.save()
+        # Créé un abonnement
+        self.subscription = OfferSubscription(
+            subscription_date=datetime.date(2014, 1, 10),
+            member=self.member,
+            offer=offer)
+        self.subscription.save()
+
+        # Demande la création de la première facture
+        invoice = create_member_invoice_for_a_period(
+            self.member, datetime.date(2014, 1, 1))
+
+        # Vérifie qu'il n'y a pas l'offre dans la facture, si c'est le cas génère une exception
+        if invoice:
+            for detail in invoice.details.all():
+                if detail.offersubscription.offer == offer:
+                    raise Exception
+
 
 class BillingTests(TestCase):
 

+ 20 - 0
coin/offers/migrations/0003_offer_non_billable.py

@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import models, migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('offers', '0002_auto_20141009_2223'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='offer',
+            name='non_billable',
+            field=models.BooleanField(default=False, help_text="L'offre ne sera pas factur\xe9 par la commande charge_members", verbose_name="n'est pas facturable"),
+            preserve_default=True,
+        ),
+    ]

+ 3 - 0
coin/offers/models.py

@@ -34,6 +34,9 @@ class Offer(models.Model):
                                       blank=False, null=False,
                                       verbose_name='frais de mise en service',
                                       help_text='en €')
+    non_billable = models.BooleanField(default=False,
+                                       verbose_name='n\'est pas facturable',
+                                       help_text='L\'offre ne sera pas facturé par la commande charge_members')
 
     def get_configuration_type_display(self):
         """