0003_payment_reason.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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. ('adhesions', '0002_auto_20161230_1814'),
  35. ('services', '0003_auto_20161231_0020'),
  36. ]
  37. operations = [
  38. migrations.AddField(
  39. model_name='payment',
  40. name='reason_type',
  41. field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType'),
  42. preserve_default=False,
  43. ),
  44. migrations.AddField(
  45. model_name='payment',
  46. name='reason_id',
  47. field=models.PositiveIntegerField(default=0),
  48. preserve_default=False,
  49. ),
  50. migrations.RunPython(
  51. set_payment_reason,
  52. ),
  53. migrations.AlterField(
  54. model_name='payment',
  55. name='reason_type',
  56. field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType'),
  57. ),
  58. migrations.AlterField(
  59. model_name='payment',
  60. name='period',
  61. field=models.PositiveIntegerField(validators=[django.core.validators.MaxValueValidator(12)], verbose_name='Période (mois)'),
  62. ),
  63. ]