|
@@ -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']))
|
|
|
+
|