123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- 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():
- self.stdout.write('{:<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['new_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']))
|