Browse Source

Add document notion for services also

Jocelyn Delande 9 years ago
parent
commit
d80ead3698

+ 1 - 0
costs/admin.py

@@ -54,3 +54,4 @@ class GoodAdmin(admin.ModelAdmin):
 class ServiceAdmin(admin.ModelAdmin):
 class ServiceAdmin(admin.ModelAdmin):
     list_display = ('name', 'subscriptions_count', 'document')
     list_display = ('name', 'subscriptions_count', 'document')
     inlines = (CostUseInline, GoodUseInline)
     inlines = (CostUseInline, GoodUseInline)
+    list_filter = [DirectDocumentFilter]

+ 20 - 0
costs/migrations/0006_service_document.py

@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('costs', '0005_auto_20151129_2354'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='service',
+            name='document',
+            field=models.ForeignKey(to='costs.Document', default=1),
+            preserve_default=False,
+        ),
+    ]

+ 3 - 19
costs/models.py

@@ -27,6 +27,7 @@ class Document(models.Model):
 class AbstractItem(models.Model):
 class AbstractItem(models.Model):
     name = models.CharField(max_length=130)
     name = models.CharField(max_length=130)
     description = models.TextField(blank=True)
     description = models.TextField(blank=True)
+    document = models.ForeignKey(Document)
 
 
     def __str__(self):
     def __str__(self):
         return self.name
         return self.name
@@ -57,16 +58,7 @@ class AbstractItem(models.Model):
         abstract = True
         abstract = True
 
 
 
 
-class AbstractCostingItem(AbstractItem):
-    """ A costing item, linked to a document
-    """
-    document = models.ForeignKey(Document)
-
-    class Meta:
-        abstract = True
-
-
-class Cost(AbstractCostingItem):
+class Cost(AbstractItem):
     """ A monthtly cost we have to pay
     """ A monthtly cost we have to pay
     """
     """
     price = models.FloatField(help_text="Coût mensuel")
     price = models.FloatField(help_text="Coût mensuel")
@@ -78,7 +70,7 @@ class Cost(AbstractCostingItem):
         verbose_name = 'Coût'
         verbose_name = 'Coût'
 
 
 
 
-class Good(AbstractCostingItem):
+class Good(AbstractItem):
     """ A good, which replacement is provisioned
     """ A good, which replacement is provisioned
     """
     """
     price = models.FloatField()
     price = models.FloatField()
@@ -177,11 +169,3 @@ class Service(AbstractItem):
 
 
     def get_absolute_url(self):
     def get_absolute_url(self):
         return reverse('detail-service', kwargs={'pk': self.pk})
         return reverse('detail-service', kwargs={'pk': self.pk})
-
-    def document(self):
-        if self.costs.exists():
-            return self.costs.first().document
-        elif self.goods.exists():
-            return self.costs.first().document
-        else:
-            return None

+ 2 - 2
costs/tests/test_models.py

@@ -10,9 +10,9 @@ class AbstractUseTests(TestCase):
     def setUp(self):
     def setUp(self):
         self.doc = Document.objects.create(name='budget')
         self.doc = Document.objects.create(name='budget')
         self.hosting_service = Service.objects.create(
         self.hosting_service = Service.objects.create(
-            name='Physical hosting')
+            name='Physical hosting', document=self.doc)
         self.mailbox_service = Service.objects.create(
         self.mailbox_service = Service.objects.create(
-            name='Mailbox')
+            name='Mailbox', document=self.doc)
 
 
         self.datacenter_cost = Cost.objects.create(
         self.datacenter_cost = Cost.objects.create(
             name='Datacenter', price=100, document=self.doc)
             name='Datacenter', price=100, document=self.doc)

+ 1 - 1
costs/tests/test_views.py

@@ -15,7 +15,7 @@ class ViewsTests(TestCase):
             provisioning_duration=datetime.timedelta(days=36*20.6),
             provisioning_duration=datetime.timedelta(days=36*20.6),
             document=self.doc,
             document=self.doc,
         )
         )
-        vpn = Service.objects.create(name='VPN')
+        vpn = Service.objects.create(name='VPN', document=self.doc)
         GoodUse.objects.create(resource=server, service=vpn, share=0.5)
         GoodUse.objects.create(resource=server, service=vpn, share=0.5)
         CostUse.objects.create(resource=rent, service=vpn, share=0.5)
         CostUse.objects.create(resource=rent, service=vpn, share=0.5)
 
 

+ 2 - 1
costs/views.py

@@ -10,8 +10,9 @@ def index(request):
 
 
 
 
 def list_services(request):
 def list_services(request):
+    services_list = Service.objects.order_by('document')
     context = {
     context = {
-        'services': Service.objects.all(),
+        'services': services_list,
     }
     }
     return render(request, 'costs/services_list.html', context)
     return render(request, 'costs/services_list.html', context)