Parcourir la source

[enh] Link ip pools to an offer

ljf il y a 7 ans
Parent
commit
7e0db26aab

+ 8 - 3
coin/offers/admin.py

@@ -6,7 +6,7 @@ from django.db.models import Q
 from polymorphic.admin import PolymorphicChildModelAdmin
 from polymorphic.admin import PolymorphicChildModelAdmin
 
 
 from coin.members.models import Member
 from coin.members.models import Member
-from coin.offers.models import Offer, OfferSubscription
+from coin.offers.models import Offer, OfferIPPool, OfferSubscription
 from coin.offers.offersubscription_filter import\
 from coin.offers.offersubscription_filter import\
             OfferSubscriptionTerminationFilter,\
             OfferSubscriptionTerminationFilter,\
             OfferSubscriptionCommitmentFilter
             OfferSubscriptionCommitmentFilter
@@ -14,6 +14,11 @@ from coin.offers.forms import OfferAdminForm
 import autocomplete_light
 import autocomplete_light
 
 
 
 
+class OfferIPPoolAdmin(admin.TabularInline):
+    model = OfferIPPool
+    extra = 1
+
+
 class OfferAdmin(admin.ModelAdmin):
 class OfferAdmin(admin.ModelAdmin):
     list_display = ('get_configuration_type_display', 'name', 'reference', 'billing_period', 'period_fees',
     list_display = ('get_configuration_type_display', 'name', 'reference', 'billing_period', 'period_fees',
                     'initial_fees')
                     'initial_fees')
@@ -21,7 +26,7 @@ class OfferAdmin(admin.ModelAdmin):
     list_filter = ('configuration_type',)
     list_filter = ('configuration_type',)
     search_fields = ['name']
     search_fields = ['name']
     form = OfferAdminForm
     form = OfferAdminForm
-
+    inlines = (OfferIPPoolAdmin,)
     # def get_readonly_fields(self, request, obj=None):
     # def get_readonly_fields(self, request, obj=None):
     #     if obj:
     #     if obj:
     #         return ['backend',]
     #         return ['backend',]
@@ -38,7 +43,7 @@ class OfferSubscriptionAdmin(admin.ModelAdmin):
                     'offer', 'member')
                     'offer', 'member')
     search_fields = ['member__first_name', 'member__last_name', 'member__email',
     search_fields = ['member__first_name', 'member__last_name', 'member__email',
                      'member__nickname']
                      'member__nickname']
-    
+
     fields = (
     fields = (
                 'member',
                 'member',
                 'offer',
                 'offer',

+ 32 - 0
coin/offers/migrations/0008_auto_20170818_1507.py

@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('resources', '0003_auto_20150203_1043'),
+        ('offers', '0007_offersubscription_comments'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='OfferIPPool',
+            fields=[
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+                ('priority', models.IntegerField()),
+                ('ippool', models.ForeignKey(to='resources.IPPool')),
+                ('offer', models.ForeignKey(to='offers.Offer')),
+            ],
+            options={
+                'ordering': ['priority'],
+            },
+        ),
+        migrations.AddField(
+            model_name='offer',
+            name='ippools',
+            field=models.ManyToManyField(to='resources.IPPool', through='offers.OfferIPPool'),
+        ),
+    ]

+ 37 - 0
coin/offers/migrations/0009_auto_20170818_1529.py

@@ -0,0 +1,37 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('offers', '0008_auto_20170818_1507'),
+    ]
+
+    operations = [
+        migrations.AlterModelOptions(
+            name='offerippool',
+            options={'ordering': ['to_assign'], 'verbose_name': "pool d'IP", 'verbose_name_plural': "pools d'IP"},
+        ),
+        migrations.RemoveField(
+            model_name='offerippool',
+            name='priority',
+        ),
+        migrations.AddField(
+            model_name='offerippool',
+            name='to_assign',
+            field=models.BooleanField(default=False, verbose_name='assignation par d\xe9faut'),
+        ),
+        migrations.AlterField(
+            model_name='offerippool',
+            name='ippool',
+            field=models.ForeignKey(verbose_name="pool d'IP", to='resources.IPPool'),
+        ),
+        migrations.AlterField(
+            model_name='offerippool',
+            name='offer',
+            field=models.ForeignKey(verbose_name='offre', to='offers.Offer'),
+        ),
+    ]

+ 18 - 0
coin/offers/models.py

@@ -9,6 +9,8 @@ from django.db.models import Count, Q
 from django.core.validators import MinValueValidator
 from django.core.validators import MinValueValidator
 from django.contrib.contenttypes.models import ContentType
 from django.contrib.contenttypes.models import ContentType
 
 
+from coin.resources.models import IPPool
+
 
 
 class OfferManager(models.Manager):
 class OfferManager(models.Manager):
     def manageable_by(self, user):
     def manageable_by(self, user):
@@ -60,6 +62,8 @@ class Offer(models.Model):
                                        verbose_name='n\'est pas facturable',
                                        verbose_name='n\'est pas facturable',
                                        help_text='L\'offre ne sera pas facturée par la commande charge_members')
                                        help_text='L\'offre ne sera pas facturée par la commande charge_members')
 
 
+    ippools = models.ManyToManyField(IPPool, through='OfferIPPool')
+
     objects = OfferManager()
     objects = OfferManager()
 
 
     def get_configuration_type_display(self):
     def get_configuration_type_display(self):
@@ -97,6 +101,20 @@ class Offer(models.Model):
         verbose_name = 'offre'
         verbose_name = 'offre'
 
 
 
 
+class OfferIPPool(models.Model):
+    offer = models.ForeignKey(Offer,
+                              verbose_name='offre')
+    ippool = models.ForeignKey(IPPool,
+                               verbose_name='pool d\'IP')
+    to_assign = models.BooleanField(default=False,
+                                    verbose_name='assignation par défaut')
+
+    class Meta:
+        verbose_name = 'pool d\'IP'
+        verbose_name_plural = "pools d'IP"
+        ordering = ['-to_assign']
+
+
 class OfferSubscriptionQuerySet(models.QuerySet):
 class OfferSubscriptionQuerySet(models.QuerySet):
     def running(self, at_date=None):
     def running(self, at_date=None):
         """ Only the running contracts at a given date.
         """ Only the running contracts at a given date.