servicetypes.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. from django.core.management.base import BaseCommand, CommandParser, CommandError
  2. from django.db.models import DecimalField, F, Sum, Func, Q
  3. from decimal import Decimal
  4. from services.models import Service, ServiceType
  5. class Command(BaseCommand):
  6. help = 'Gestion des types de services'
  7. def add_arguments(self, parser):
  8. cmd = self
  9. class SubParser(CommandParser):
  10. def __init__(self, **kwargs):
  11. super().__init__(cmd, **kwargs)
  12. subparsers = parser.add_subparsers(dest='command', parser_class=SubParser)
  13. subparsers.required = True
  14. parser_list = subparsers.add_parser('list', help='Lister les types de services')
  15. parser_add = subparsers.add_parser('add', help='Ajouter un nouveau type de service')
  16. parser_add.add_argument('name', help='Nom du nouveau type de service')
  17. parser_change = subparsers.add_parser('change', help='Renomer un type de service')
  18. parser_change.add_argument('old_name', help='Ancien nom')
  19. parser_change.add_argument('new_name', help='Nouveau nom')
  20. parser_delete = subparsers.add_parser('delete', help='Supprimer un type de service')
  21. parser_delete.add_argument('name', help='Nom du type de service')
  22. def handle(self, *args, **options):
  23. cmd = options.pop('command')
  24. getattr(self, 'handle_{cmd}'.format(cmd=cmd))(*args, **options)
  25. def handle_list(self, *args, **options):
  26. for st in ServiceType.objects.all():
  27. self.stdout.write('{:<30} {:4d} services'.format(st.name, st.services.count()))
  28. def handle_add(self, *args, **options):
  29. if ServiceType.objects.filter(name=options['name']).exists():
  30. raise CommandError('Le type de service "%s" existe déjà' % options['name'])
  31. st = ServiceType.objects.create(name=options['name'])
  32. self.stdout.write(self.style.SUCCESS('Nouveau type de service "%s" créé avec succès' % st.name))
  33. def handle_change(self, *args, **options):
  34. try:
  35. st = ServiceType.objects.get(name=options['old_name'])
  36. except ServiceType.DoesNotExist:
  37. raise CommandError('Le type de service "%s" n’existe pas' % options['old_name'])
  38. if ServiceType.objects.filter(name=options['new_name']).exists():
  39. raise CommandError('Le type de service "%s" existe déjà' % options['new_name'])
  40. st.name = options['new_name']
  41. st.save()
  42. self.stdout.write(self.style.SUCCESS('Type de service renommé en "%s"' % options['new_name']))
  43. def handle_delete(self, *args, **options):
  44. try:
  45. st = ServiceType.objects.get(name=options['name'])
  46. except ServiceType.DoesNotExist:
  47. raise CommandError('Le type de service "%s" n’existe pas' % options['name'])
  48. if Service.objects.filter(service_type=st).exists():
  49. raise CommandError('Il existe des services de type "%s", suppression refusé' % options['name'])
  50. st.delete()
  51. self.stdout.write(self.style.SUCCESS('Le type de service "%s" a été supprimé' % options['name']))