# Generated by Django 5.2.12 on 2026-05-26 08:20 import django.db.models.deletion import uuid from django.conf import settings from django.db import migrations, models def seed_rate_history(apps, schema_editor): HourlyRateHistory = apps.get_model('workspaces', 'HourlyRateHistory') WorkspaceUserRate = apps.get_model('workspaces', 'WorkspaceUserRate') ProjectUserRate = apps.get_model('projects', 'ProjectUserRate') workspace_rows = [ HourlyRateHistory( workspace_id=rate.workspace_id, user_id=rate.user_id, project_id=None, scope='workspace', hourly_rate=rate.hourly_rate, currency=rate.currency, effective_from=rate.effective_from, is_active=True, ) for rate in WorkspaceUserRate.objects.filter(is_deleted=False) ] project_rows = [ HourlyRateHistory( workspace_id=rate.project.workspace_id, user_id=rate.user_id, project_id=rate.project_id, scope='project', hourly_rate=rate.hourly_rate, currency=rate.currency, effective_from=rate.effective_from, is_active=True, ) for rate in ProjectUserRate.objects.select_related('project').filter(is_deleted=False) ] HourlyRateHistory.objects.bulk_create(workspace_rows + project_rows, ignore_conflicts=True) class Migration(migrations.Migration): dependencies = [ ('projects', '0005_project_thumbnail'), ('workspaces', '0007_workspacemembership_membership_ws_active_user_idx'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.CreateModel( name='HourlyRateHistory', fields=[ ('id', models.UUIDField(default=uuid.uuid7, primary_key=True, serialize=False)), ('created_at', models.DateTimeField(auto_now_add=True)), ('updated_at', models.DateTimeField(auto_now=True)), ('deleted_at', models.DateTimeField(blank=True, null=True)), ('is_deleted', models.BooleanField(default=False)), ('is_active', models.BooleanField(default=False)), ('scope', models.CharField(choices=[('workspace', 'Workspace'), ('project', 'Project')], max_length=16)), ('hourly_rate', models.DecimalField(decimal_places=2, max_digits=10)), ('currency', models.CharField(default='USD', max_length=3)), ('effective_from', models.DateTimeField()), ('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='created_%(app_label)s_%(class)s_set', to=settings.AUTH_USER_MODEL)), ('project', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='hourly_rate_history', to='projects.project')), ('updated_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='updated_%(app_label)s_%(class)s_set', to=settings.AUTH_USER_MODEL)), ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='hourly_rate_history', to=settings.AUTH_USER_MODEL)), ('workspace', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='hourly_rate_history', to='workspaces.workspace')), ], options={ 'db_table': 'hourly_rate_history', 'ordering': ('effective_from', 'created_at'), 'indexes': [models.Index(fields=['workspace', 'user', 'effective_from'], name='hrh_ws_user_eff_idx'), models.Index(fields=['project', 'user', 'effective_from'], name='hrh_project_user_eff_idx')], }, ), migrations.RunPython(seed_rate_history, migrations.RunPython.noop), ]