content: import django.db.models.deletion
  import taggit.managers
  from django.contrib.contenttypes.models import ContentType
  from django.db import migrations, models
  
  import utilities.json
  from extras.choices import *
  
  
  def move_webhooks(apps, schema_editor):
      Webhook = apps.get_model('extras', 'Webhook')
      EventRule = apps.get_model('extras', 'EventRule')
  
      webhook_ct = ContentType.objects.get_for_model(Webhook).pk
      for webhook in Webhook.objects.all():
          event = EventRule()
  
          # Replicate attributes from Webhook instance
          event.name = webhook.name
          event.type_create = webhook.type_create
          event.type_update = webhook.type_update
          event.type_delete = webhook.type_delete
          event.type_job_start = webhook.type_job_start
          event.type_job_end = webhook.type_job_end
          event.enabled = webhook.enabled
          event.conditions = webhook.conditions
  
          event.action_type = EventRuleActionChoices.WEBHOOK
          event.action_object_type_id = webhook_ct
          event.action_object_id = webhook.id
          event.save()
          event.content_types.add(*webhook.content_types.all())
  
  
  class Migration(migrations.Migration):
      dependencies = [
          ('contenttypes', '0002_remove_content_type_name'),
          ('extras', '0100_customfield_ui_attrs'),
      ]
  
      operations = [
          # Create the EventRule model
          migrations.CreateModel(
              name='EventRule',
              fields=[
                  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)),
                  ('created', models.DateTimeField(auto_now_add=True, null=True)),
                  ('last_updated', models.DateTimeField(auto_now=True, null=True)),
                  (
                      'custom_field_data',
                      models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder),
                  ),
                  ('name', models.CharField(max_length=150, unique=True)),
                  ('description', models.CharField(blank=True, max_length=200)),
                  ('type_create', models.BooleanField(default=False)),
                  ('type_update', models.BooleanField(default=False)),
                  ('type_delete', models.BooleanField(default=False)),
                  ('type_job_start', models.BooleanField(default=False)),
                  ('type_job_end', models.BooleanField(default=False)),
                  ('enabled', models.BooleanField(default=True)),
                  ('conditions', models.JSONField(blank=True, null=True)),
                  ('action_type', models.CharField(default='webhook', max_length=30)),
                  ('action_object_id', models.PositiveBigIntegerField(blank=True, null=True)),
                  ('action_parameters', models.JSONField(blank=True, null=True)),
                  ('action_data', models.JSONField(blank=True, null=True)),
                  ('comments', models.TextField(blank=True)),
              ],
              options={
                  'verbose_name': 'eventrule',
                  'verbose_name_plural': 'eventrules',
                  'ordering': ('name',),
              },
          ),
          migrations.AddField(
              model_name='eventrule',
              name='action_object_type',
              field=models.ForeignKey(
                  on_delete=django.db.models.deletion.CASCADE,
                  related_name='eventrule_actions',
                  to='contenttypes.contenttype',
              ),
          ),
          migrations.AddField(
              model_name='eventrule',
              name='content_types',
              field=models.ManyToManyField(related_name='eventrules', to='contenttypes.contenttype'),
          ),
          migrations.AddField(
              model_name='eventrule',
              name='tags',
              field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'),
          ),
          migrations.AddIndex(
              model_name='eventrule',
              index=models.Index(
                  fields=['action_object_type', 'action_object_id'], name='extras_even_action__d9e2af_idx'
              ),
          ),
          # Replicate Webhook data
          migrations.RunPython(move_webhooks),
          # Remove obsolete fields from Webhook
          migrations.RemoveConstraint(
              model_name='webhook',
              name='extras_webhook_unique_payload_url_types',
          ),
          migrations.RemoveField(
              model_name='webhook',
              name='conditions',
          ),
          migrations.RemoveField(
              model_name='webhook',
              name='content_types',
          ),
          migrations.RemoveField(
              model_name='webhook',
              name='enabled',
          ),
          migrations.RemoveField(
              model_name='webhook',
              name='type_create',
          ),
          migrations.RemoveField(
              model_name='webhook',
              name='type_delete',
          ),
          migrations.RemoveField(
              model_name='webhook',
              name='type_job_end',
          ),
          migrations.RemoveField(
              model_name='webhook',
              name='type_job_start',
          ),
          migrations.RemoveField(
              model_name='webhook',
              name='type_update',
          ),
          # Add description field to Webhook
          migrations.AddField(
              model_name='webhook',
              name='description',
              field=models.CharField(blank=True, max_length=200),
          ),
      ]
  