physique_vers_morale.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. from django.core.management.base import BaseCommand, CommandParser, CommandError
  2. from django.contrib.contenttypes.models import ContentType
  3. from django.contrib.auth.models import User
  4. from adhesions.models import Adhesion, Corporation
  5. def boolean_input(question, default=None):
  6. result = input("%s " % question)
  7. if not result and default is not None:
  8. return default
  9. while len(result) < 1 or result[0].lower() not in "yn":
  10. result = input("Please answer yes or no: ")
  11. return result[0].lower() == "y"
  12. class Command(BaseCommand):
  13. help = 'Convertir une personne physique en personne morale'
  14. def add_arguments(self, parser):
  15. parser.add_argument('adt', type=int, help='Numéro d’adhérent')
  16. parser.add_argument('raison_sociale', help='Raison sociale')
  17. def handle(self, *args, **options):
  18. pk = options['adt']
  19. try:
  20. adh = Adhesion.objects.get(pk=pk)
  21. except Adhesion.DoesNotExist:
  22. raise CommandError('L’adherent ADT%d n’existe pas.' % pk)
  23. if adh.corporation:
  24. raise CommandError('L’adherent ADT%d est déjà une personne morale.' % pk)
  25. user = adh.user
  26. if user.first_name != 'FIXME':
  27. self.stdout.write(self.style.WARNING('L’adherent ADT%d s’est vu spécifier un prénom (%s), risque de perte de données.' % (pk, user.first_name)))
  28. if not boolean_input('Continuer ? [y/n]'):
  29. return
  30. if user.last_name != '%d' % pk:
  31. self.stdout.write(self.style.WARNING('L’adherent ADT%d s’est vu spécifier un nom (%s), risque de perte de données.' % (pk, user.last_name)))
  32. if not boolean_input('Continuer ? [y/n]'):
  33. return
  34. email = user.email
  35. tel = user.profile.phone_number
  36. address = user.profile.address
  37. if user.profile.ssh_keys:
  38. self.stdout.write(self.style.WARNING('L’adherent ADT%d s’est vu spécifier une clef SSH, risque de perte de données.' % (pk, user.last_name)))
  39. if not boolean_input('Continuer ? [y/n]'):
  40. return
  41. notes = user.profile.notes
  42. corporation = Corporation(social_reason=options['raison_sociale'], email=email, phone_number=tel, address=address, notes=notes)
  43. corporation.skip_adhesion_creation = True
  44. corporation.save()
  45. Adhesion.objects.filter(pk=pk).update(user=None, corporation=corporation)
  46. user.delete()
  47. self.stdout.write(self.style.SUCCESS('Adhérent ADT%d convertie en personne morale avec succès.' % pk))