102 lines
7.4 KiB
Python
102 lines
7.4 KiB
Python
# 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')},
|
|
},
|
|
),
|
|
]
|