0003_payment_reason.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. # -*- coding: utf-8 -*-
  2. # Generated by Django 1.10.4 on 2017-01-01 03:55
  3. from __future__ import unicode_literals
  4. import django.core.validators
  5. from django.db import migrations, models
  6. import django.db.models.deletion
  7. def set_payment_reason(apps, schema_editor):
  8. db_alias = schema_editor.connection.alias
  9. Payment = apps.get_model('banking', 'Payment')
  10. Adherent = apps.get_model('adhesions', 'Adherent')
  11. Service = apps.get_model('services', 'Service')
  12. ContentType = apps.get_model('contenttypes', 'ContentType')
  13. adherent_ctype = ContentType.objects.get_for_model(Adherent)
  14. service_ctype = ContentType.objects.get_for_model(Service)
  15. for payment in Payment.objects.using(db_alias).all():
  16. try:
  17. adherent = Adherent.objects.get(contribution__pk=payment.pk)
  18. except Adherent.DoesNotExist:
  19. pass
  20. else:
  21. payment.reason_type = adherent_ctype
  22. payment.reason_id = adherent.pk
  23. payment.save()
  24. continue
  25. # If the payment is not for an adherent, it must be for a service.
  26. service = Service.objects.get(contribution__pk=payment.pk)
  27. payment.reason_type = service_ctype
  28. payment.reason_id = service.pk
  29. payment.save()
  30. class Migration(migrations.Migration):
  31. dependencies = [
  32. ('contenttypes', '0002_remove_content_type_name'),
  33. ('banking', '0002_payment_date'),
  34. ]
  35. operations = [
  36. migrations.AddField(
  37. model_name='payment',
  38. name='reason_type',
  39. field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType'),
  40. preserve_default=False,
  41. ),
  42. migrations.AddField(
  43. model_name='payment',
  44. name='reason_id',
  45. field=models.PositiveIntegerField(default=0),
  46. preserve_default=False,
  47. ),
  48. migrations.RunPython(
  49. set_payment_reason,
  50. ),
  51. migrations.AlterField(
  52. model_name='payment',
  53. name='reason_type',
  54. field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType'),
  55. ),
  56. migrations.AlterField(
  57. model_name='payment',
  58. name='period',
  59. field=models.PositiveIntegerField(validators=[django.core.validators.MaxValueValidator(12)], verbose_name='Période (mois)'),
  60. ),
  61. ]