Browse Source

commande servicetypes

Élie Bouttier 8 years ago
parent
commit
1fb82fda10

+ 66 - 0
services/management/commands/servicetypes.py

@@ -0,0 +1,66 @@
+from django.core.management.base import BaseCommand, CommandParser, CommandError
+from django.db.models import DecimalField, F, Sum, Func, Q
+
+from decimal import Decimal
+
+from services.models import Service, ServiceType
+
+
+class Command(BaseCommand):
+    help = 'Gestion des types de services'
+
+    def add_arguments(self, parser):
+        cmd = self
+        class SubParser(CommandParser):
+            def __init__(self, **kwargs):
+                super().__init__(cmd, **kwargs)
+        subparsers = parser.add_subparsers(dest='command', parser_class=SubParser)
+        subparsers.required = True
+
+        parser_list = subparsers.add_parser('list', help='Lister les types de services')
+
+        parser_add = subparsers.add_parser('add', help='Ajouter un nouveau type de service')
+        parser_add.add_argument('name', help='Nom du nouveau type de service')
+
+        parser_change = subparsers.add_parser('change', help='Renomer un type de service')
+        parser_change.add_argument('old_name', help='Ancien nom')
+        parser_change.add_argument('new_name', help='Nouveau nom')
+
+        parser_delete = subparsers.add_parser('delete', help='Supprimer un type de service')
+        parser_delete.add_argument('name', help='Nom du type de service')
+
+    def handle(self, *args, **options):
+        cmd = options.pop('command')
+        getattr(self, 'handle_{cmd}'.format(cmd=cmd))(*args, **options)
+
+    def handle_list(self, *args, **options):
+        for st in ServiceType.objects.all():
+            print('{:<30} {:4d} services'.format(st.name, st.services.count()))
+
+    def handle_add(self, *args, **options):
+        if ServiceType.objects.filter(name=options['name']).exists():
+            raise CommandError('Le type de service "%s" existe déjà' % options['name'])
+        st = ServiceType.objects.create(name=options['name'])
+        self.stdout.write(self.style.SUCCESS('Nouveau type de service "%s" créé avec succès' % st.name))
+
+    def handle_change(self, *args, **options):
+        try:
+            st = ServiceType.objects.get(name=options['old_name'])
+        except ServiceType.DoesNotExist:
+            raise CommandError('Le type de service "%s" n’existe pas' % options['old_name'])
+        if ServiceType.objects.filter(name=options['new_name']).exists():
+            raise CommandError('Le type de service "%s" existe déjà' % options['name'])
+        st.name = options['new_name']
+        st.save()
+        self.stdout.write(self.style.SUCCESS('Type de service renommé en "%s"' % options['new_name']))
+
+    def handle_delete(self, *args, **options):
+        try:
+            st = ServiceType.objects.get(name=options['name'])
+        except ServiceType.DoesNotExist:
+            raise CommandError('Le type de service "%s" n’existe pas' % options['name'])
+        if Service.objects.filter(service_type=st).exists():
+            raise CommandError('Il existe des services de type "%s", suppression refusé' % options['name'])
+        st.delete()
+        self.stdout.write(self.style.SUCCESS('Le type de service "%s" a été supprimé' % options['name']))
+

+ 20 - 0
services/migrations/0006_auto_20170111_1053.py

@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10 on 2017-01-11 09:53
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('services', '0005_auto_20170102_0003'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='servicetype',
+            name='name',
+            field=models.CharField(max_length=64, unique=True, verbose_name='Nom'),
+        ),
+    ]

+ 3 - 3
services/models.py

@@ -17,8 +17,8 @@ class IPResource(models.Model):
 
     @property
     def in_use(self):
-        if Service.objects.filter(ip_resources=self, start__lte=timezone.now(),
-                                  end__isnull=True).exists():
+        if Service.objects.filter(ip_resources=self) \
+                .filter(Service.get_ongoing_filter()).exists():
             return True
         else:
             return False
@@ -35,7 +35,7 @@ class IPResource(models.Model):
 
 
 class ServiceType(models.Model):
-    name = models.CharField(max_length=64, verbose_name='Nom')
+    name = models.CharField(max_length=64, verbose_name='Nom', unique=True)
     group = models.ForeignKey(Group, null=True, blank=True,
                               verbose_name='Groupe de gestion',
                               related_name='service_types')