108 lines
4.1 KiB
Python
108 lines
4.1 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"),
|
|
]
|