# Generated by Django 6.0.7 on 2026-10-05 13:06 import common.storages import django.contrib.gis.db.models.fields import django.db.models.deletion from django.conf import settings from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ('assets', '0029_publicbuildingdocument_floor_location_and_more'), ('common', '0017_territory'), ('contenttypes', '0002_remove_content_type_name'), ('documents', '0004_alter_documentfolder_visibility_and_more'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.CreateModel( name='ManagementZone', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('code', models.CharField(max_length=100, unique=True, verbose_name='Code')), ('name_fr', models.CharField(max_length=255, verbose_name='Nom (FR)')), ('name_nl', models.CharField(blank=True, max_length=255, null=True, verbose_name='Nom (NL)')), ('description', models.TextField(blank=True, null=True, verbose_name='Description')), ('instructions', models.TextField(blank=True, help_text="Consignes d'exploitation, points de vigilance, règles de sécurité...", null=True, verbose_name="Consignes et points d'attention")), ('geom', django.contrib.gis.db.models.fields.MultiPolygonField(blank=True, null=True, srid=3812, verbose_name='Périmètre géographique')), ('color', models.CharField(blank=True, help_text='Code hexadécimal (ex: #198754). Si vide, utilise la couleur du type de zone.', max_length=20, null=True, verbose_name="Couleur d'affichage")), ('is_active', models.BooleanField(default=True, verbose_name='Active')), ('target_frequency_days', models.IntegerField(blank=True, help_text='Intervalle indicatif entre interventions en jours.', null=True, verbose_name='Fréquence cible (jours)')), ('seasonality_notes', models.CharField(blank=True, help_text="Ex: Tonte d'avril à octobre; fauche tardive en septembre; interdiction de taille au printemps.", max_length=255, null=True, verbose_name='Saisonnalité / Calendrier')), ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Date de création')), ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Date de mise à jour')), ('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='created_management_zones', to=settings.AUTH_USER_MODEL, verbose_name='Créé par')), ('thematic', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='management_zones', to='common.thematic', verbose_name='Thématique')), ], options={ 'verbose_name': 'Zone de gestion', 'verbose_name_plural': 'Zones de gestion', 'ordering': ['thematic', 'code'], }, ), migrations.CreateModel( name='ManagementZoneDocument', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('description', models.TextField(blank=True, null=True, verbose_name='Description du document')), ('upload_date', models.DateTimeField(auto_now=True, verbose_name='Date de téléversement')), ('status', models.CharField(choices=[('active', 'Actif'), ('archived', 'Archivé')], default='active')), ('file', models.FileField(max_length=255, storage=common.storages.PrivateMediaStorage(), upload_to='assets_documents/management_zones/', verbose_name='Fichier')), ('thumbnail', models.ImageField(blank=True, max_length=255, null=True, storage=common.storages.PrivateMediaStorage(), upload_to='assets_documents/management_zones/')), ('managed_document', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(app_label)s_%(class)s_sources', to='documents.manageddocument')), ('uploaded_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='Ajouté par')), ('zone', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='documents', to='assets.managementzone', verbose_name='Zone de gestion')), ], options={ 'verbose_name': 'Document de zone de gestion', 'verbose_name_plural': 'Documents de zones de gestion', }, ), migrations.CreateModel( name='ManagementZoneType', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('code', models.CharField(max_length=100, unique=True, verbose_name='Code')), ('name_fr', models.CharField(max_length=255, verbose_name='Nom (FR)')), ('name_nl', models.CharField(blank=True, max_length=255, null=True, verbose_name='Nom (NL)')), ('description', models.TextField(blank=True, null=True, verbose_name='Description')), ('default_color', models.CharField(default='#198754', max_length=20, verbose_name='Couleur par défaut')), ('thematic', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='management_zone_types', to='common.thematic', verbose_name='Thématique')), ], options={ 'verbose_name': 'Type de zone de gestion', 'verbose_name_plural': 'Types de zones de gestion', 'ordering': ['thematic', 'name_fr'], }, ), migrations.AddField( model_name='managementzone', name='zone_type', field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='management_zones', to='assets.managementzonetype', verbose_name='Type de zone de gestion'), ), migrations.CreateModel( name='ManagementZoneAsset', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('object_id', models.PositiveIntegerField(verbose_name="ID de l'asset")), ('is_excluded', models.BooleanField(default=False, help_text='Si coché, cet équipement est exclu de la zone même si sa géométrie intersecte le périmètre.', verbose_name='Exclu')), ('notes', models.CharField(blank=True, max_length=255, null=True, verbose_name='Notes')), ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype', verbose_name="Type d'asset")), ('management_zone', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='explicit_assets', to='assets.managementzone', verbose_name='Zone de gestion')), ], options={ 'verbose_name': 'Asset de zone de gestion', 'verbose_name_plural': 'Assets de zones de gestion', 'unique_together': {('management_zone', 'content_type', 'object_id')}, }, ), ]