# Generated by Django 5.2.17 on 2026-09-30 15:14 import django.db.models.deletion from django.conf import settings from django.db import migrations, models class Migration(migrations.Migration): initial = True dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.CreateModel( name='DayChangeRequest', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('kind', models.CharField(choices=[('leave', 'Congé / absence'), ('hours', 'Modification d’horaires'), ('swap', 'Inversion de journées')], max_length=8)), ('start_date', models.DateField()), ('end_date', models.DateField()), ('target_date', models.DateField(blank=True, null=True)), ('reason', models.TextField(blank=True, max_length=2000)), ('proposed_slots', models.JSONField(default=list)), ('before', models.JSONField(default=list)), ('after', models.JSONField(default=list)), ('status', models.CharField(choices=[('pending', 'En attente'), ('approved', 'Acceptée'), ('rejected', 'Refusée'), ('cancelled', 'Annulée')], default='pending', max_length=10)), ('reviewed_at', models.DateTimeField(blank=True, null=True)), ('response', models.TextField(blank=True, max_length=2000)), ('created_at', models.DateTimeField(auto_now_add=True)), ('updated_at', models.DateTimeField(auto_now=True)), ('reviewed_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), ('target_user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='received_swaps', to=settings.AUTH_USER_MODEL)), ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='day_requests', to=settings.AUTH_USER_MODEL)), ], options={ 'ordering': ['-created_at', '-pk'], }, ), migrations.CreateModel( name='PlanningState', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('revision', models.PositiveIntegerField(default=0)), ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), ], ), migrations.CreateModel( name='ScheduleException', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('label', models.CharField(blank=True, max_length=160)), ('kind', models.CharField(choices=[('work', 'Horaires exceptionnels'), ('rest', 'Repos'), ('absence', 'Congé / absence')], default='work', max_length=8)), ('start_date', models.DateField()), ('end_date', models.DateField(blank=True, null=True)), ('recurring', models.BooleanField(default=False)), ('weekdays', models.JSONField(default=list)), ('every_weeks', models.PositiveSmallIntegerField(default=1)), ('created_at', models.DateTimeField(auto_now_add=True)), ('updated_at', models.DateTimeField(auto_now=True)), ('created_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), ('request', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='applied_exceptions', to='planning.daychangerequest')), ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='schedule_exceptions', to=settings.AUTH_USER_MODEL)), ], options={ 'ordering': ['-pk'], }, ), migrations.CreateModel( name='ExceptionSlot', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('start_time', models.TimeField()), ('end_time', models.TimeField()), ('end_day_offset', models.PositiveSmallIntegerField(default=0)), ('exception', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='slots', to='planning.scheduleexception')), ], options={ 'ordering': ['start_time'], }, ), migrations.CreateModel( name='WorkSchedule', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('valid_from', models.DateField()), ('valid_to', models.DateField(blank=True, null=True)), ('updated_at', models.DateTimeField(auto_now=True)), ('created_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='work_schedules', to=settings.AUTH_USER_MODEL)), ], options={ 'ordering': ['-valid_from', '-pk'], }, ), migrations.CreateModel( name='WorkScheduleSlot', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('weekday', models.PositiveSmallIntegerField()), ('start_time', models.TimeField()), ('end_time', models.TimeField()), ('end_day_offset', models.PositiveSmallIntegerField(default=0)), ('schedule', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='slots', to='planning.workschedule')), ], options={ 'ordering': ['weekday', 'start_time'], }, ), migrations.AddIndex( model_name='daychangerequest', index=models.Index(fields=['status', 'user'], name='request_status_user_idx'), ), migrations.AddIndex( model_name='scheduleexception', index=models.Index(fields=['user', 'start_date'], name='exception_user_date_idx'), ), migrations.AddConstraint( model_name='workschedule', constraint=models.UniqueConstraint(fields=('user', 'valid_from'), name='schedule_user_start_unique'), ), ]