Louis Mazin 4db822aebe big maj
2026-10-05 17:52:28 +02:00

125 lines
6.8 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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'),
),
]