132 lines
4.3 KiB
Python
132 lines
4.3 KiB
Python
|
# Generated by Django 2.1 on 2018-08-31 13:17
|
||
|
|
||
|
import django.db.models.deletion
|
||
|
import jsonfield.encoder
|
||
|
import jsonfield.fields
|
||
|
from django.db import migrations, models
|
||
|
|
||
|
|
||
|
def copy_motion_version_content_to_motion(apps, schema_editor):
|
||
|
"""
|
||
|
Move all motion version content of the active version to the motion.
|
||
|
"""
|
||
|
Motion = apps.get_model('motions', 'Motion')
|
||
|
|
||
|
for motion in Motion.objects.all():
|
||
|
motion.title = motion.active_version.title
|
||
|
motion.text = motion.active_version.text
|
||
|
motion.reason = motion.active_version.reason
|
||
|
motion.modified_final_version = motion.active_version.modified_final_version
|
||
|
motion.amendment_paragraphs = motion.active_version.amendment_paragraphs
|
||
|
motion.save(skip_autoupdate=True)
|
||
|
|
||
|
|
||
|
def migrate_active_change_recommendations(apps, schema_editor):
|
||
|
"""
|
||
|
Delete all change recommendation of motion versions, that are not active. For active
|
||
|
change recommendations the motion id will be set.
|
||
|
"""
|
||
|
MotionChangeRecommendation = apps.get_model('motions', 'MotionChangeRecommendation')
|
||
|
to_delete = []
|
||
|
for cr in MotionChangeRecommendation.objects.all():
|
||
|
# chack if version id matches the active version of the motion
|
||
|
if cr.motion_version.id == cr.motion_version.motion.active_version.id:
|
||
|
cr.motion = cr.motion_version.motion
|
||
|
cr.save(skip_autoupdate=True)
|
||
|
else:
|
||
|
to_delete.append(cr)
|
||
|
|
||
|
# delete non active change recommendations
|
||
|
for cr in to_delete:
|
||
|
cr.delete(skip_autoupdate=True)
|
||
|
|
||
|
|
||
|
class Migration(migrations.Migration):
|
||
|
|
||
|
dependencies = [
|
||
|
('motions', '0010_auto_20180822_1042'),
|
||
|
]
|
||
|
|
||
|
operations = [
|
||
|
# Create new fields. Title and Text have empty defaults, but the values
|
||
|
# should be overwritten by copy_motion_version_content_to_motion. In the next
|
||
|
# migration file these defaults are removed.
|
||
|
migrations.AddField(
|
||
|
model_name='motion',
|
||
|
name='title',
|
||
|
field=models.CharField(max_length=255, default=''),
|
||
|
),
|
||
|
migrations.AddField(
|
||
|
model_name='motion',
|
||
|
name='text',
|
||
|
field=models.TextField(default=''),
|
||
|
),
|
||
|
migrations.AddField(
|
||
|
model_name='motion',
|
||
|
name='reason',
|
||
|
field=models.TextField(blank=True, null=True),
|
||
|
),
|
||
|
migrations.AddField(
|
||
|
model_name='motion',
|
||
|
name='modified_final_version',
|
||
|
field=models.TextField(blank=True, null=True),
|
||
|
),
|
||
|
migrations.AddField(
|
||
|
model_name='motion',
|
||
|
name='amendment_paragraphs',
|
||
|
field=jsonfield.fields.JSONField(
|
||
|
dump_kwargs={
|
||
|
'cls': jsonfield.encoder.JSONEncoder,
|
||
|
'separators': (',', ':')
|
||
|
},
|
||
|
load_kwargs={},
|
||
|
null=True),
|
||
|
),
|
||
|
|
||
|
# Copy old motion version data
|
||
|
migrations.RunPython(copy_motion_version_content_to_motion),
|
||
|
|
||
|
# Change recommendations
|
||
|
migrations.AddField(
|
||
|
model_name='motionchangerecommendation',
|
||
|
name='motion',
|
||
|
field=models.ForeignKey(
|
||
|
on_delete=django.db.models.deletion.CASCADE,
|
||
|
null=True, # This is reverted in the next migration
|
||
|
related_name='change_recommendations',
|
||
|
to='motions.Motion'),
|
||
|
),
|
||
|
migrations.RunPython(migrate_active_change_recommendations),
|
||
|
migrations.RemoveField(
|
||
|
model_name='motionchangerecommendation',
|
||
|
name='motion_version',
|
||
|
),
|
||
|
|
||
|
# remove motion version references from motion and state.
|
||
|
migrations.RemoveField(
|
||
|
model_name='motion',
|
||
|
name='active_version',
|
||
|
),
|
||
|
migrations.AlterUniqueTogether(
|
||
|
name='motionversion',
|
||
|
unique_together=set(),
|
||
|
),
|
||
|
migrations.RemoveField(
|
||
|
model_name='motionversion',
|
||
|
name='motion',
|
||
|
),
|
||
|
migrations.RemoveField(
|
||
|
model_name='state',
|
||
|
name='leave_old_version_active',
|
||
|
),
|
||
|
migrations.RemoveField(
|
||
|
model_name='state',
|
||
|
name='versioning',
|
||
|
),
|
||
|
|
||
|
# Delete motion version.
|
||
|
migrations.DeleteModel(
|
||
|
name='MotionVersion',
|
||
|
),
|
||
|
]
|