376 lines
29 KiB
Python
376 lines
29 KiB
Python
# Generated by Django 6.0.7 on 2026-07-22 13:42
|
||
|
||
import common.storages
|
||
import django.contrib.gis.db.models.fields
|
||
import django.db.models.deletion
|
||
import sign.models
|
||
from django.conf import settings
|
||
from django.db import migrations, models
|
||
|
||
|
||
class Migration(migrations.Migration):
|
||
|
||
initial = True
|
||
|
||
dependencies = [
|
||
('assets', '0002_initial'),
|
||
('common', '0002_initial'),
|
||
('documents', '0001_initial'),
|
||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||
]
|
||
|
||
operations = [
|
||
migrations.CreateModel(
|
||
name='Organization',
|
||
fields=[
|
||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||
('name_fr', models.CharField(max_length=255, verbose_name='Nom (FR)')),
|
||
('name_nl', models.CharField(max_length=255, verbose_name='Nom (NL)')),
|
||
('code', models.CharField(max_length=100, unique=True, verbose_name='Code')),
|
||
('organization_type', models.CharField(choices=[('municipality', 'Commune'), ('region', 'Région'), ('administration', 'Administration'), ('other', 'Autre')], default='municipality', max_length=50, verbose_name="Type d'organisation")),
|
||
('description', models.TextField(blank=True, null=True, verbose_name='Description')),
|
||
('contact_email', models.EmailField(blank=True, max_length=254, null=True, verbose_name='Email de contact')),
|
||
('is_active', models.BooleanField(default=True, verbose_name='Actif')),
|
||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||
('updated_at', models.DateTimeField(auto_now=True)),
|
||
],
|
||
options={
|
||
'verbose_name': 'Organisation',
|
||
'verbose_name_plural': 'Organisations',
|
||
'ordering': ['name_fr'],
|
||
},
|
||
),
|
||
migrations.CreateModel(
|
||
name='SignPanelType',
|
||
fields=[
|
||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||
('code', models.CharField(max_length=100, unique=True)),
|
||
('name_fr', models.CharField(max_length=200)),
|
||
('name_nl', models.CharField(max_length=200)),
|
||
('description', models.TextField(blank=True, null=True)),
|
||
('sgv_picture', models.ImageField(blank=True, null=True, upload_to='sign/signpanels_types/')),
|
||
('default_width', models.FloatField(blank=True, null=True, verbose_name='Largeur par défaut (cm)')),
|
||
('default_height', models.FloatField(blank=True, null=True, verbose_name='Hauteur par défaut (cm)')),
|
||
('default_diameter', models.FloatField(blank=True, null=True, verbose_name='Diamètre par défaut (cm)')),
|
||
],
|
||
),
|
||
migrations.CreateModel(
|
||
name='ComplementaryPoliceRegulation',
|
||
fields=[
|
||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||
('title', models.CharField(max_length=255)),
|
||
('description', models.TextField(blank=True, null=True)),
|
||
('reference', models.CharField(max_length=100)),
|
||
('status', models.CharField(blank=True, choices=[('in_preparation', 'En préparation'), ('to_be_approved', 'À approuver'), ('approved', 'Approuvé'), ('expired', 'Expiré'), ('archived', 'Archivé')], default='in_preparation', max_length=50, null=True)),
|
||
('decision_date', models.DateField(blank=True, null=True)),
|
||
('file', models.FileField(max_length=255, storage=common.storages.PrivateMediaStorage(), upload_to=sign.models.upload_to_police_regulation, verbose_name='Fichier')),
|
||
('thumbnail', models.ImageField(blank=True, max_length=255, null=True, storage=common.storages.PrivateMediaStorage(), upload_to=sign.models.upload_to_police_regulation)),
|
||
('text_introduction_fr', models.TextField(blank=True, null=True, verbose_name='Introduction (FR)')),
|
||
('text_introduction_nl', models.TextField(blank=True, null=True, verbose_name='Introduction (NL)')),
|
||
('text_abrogations_fr', models.TextField(blank=True, null=True, verbose_name='Abrogations (FR)')),
|
||
('text_abrogations_nl', models.TextField(blank=True, null=True, verbose_name='Abrogations (NL)')),
|
||
('text_dispositions_finales_fr', models.TextField(blank=True, null=True, verbose_name='Dispositions finales (FR)')),
|
||
('text_dispositions_finales_nl', models.TextField(blank=True, null=True, verbose_name='Dispositions finales (NL)')),
|
||
('text_nouvelles_dispositions_fr', models.TextField(blank=True, null=True, verbose_name='Nouvelles dispositions – notes (FR)')),
|
||
('text_nouvelles_dispositions_nl', models.TextField(blank=True, null=True, verbose_name='Nouvelles dispositions – notes (NL)')),
|
||
('uploaded_at', models.DateTimeField(auto_now_add=True)),
|
||
('uploaded_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='uploaded_complementary_police_regulations_sign', to=settings.AUTH_USER_MODEL, verbose_name='Ajouté par')),
|
||
('organization', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='sign_app_regulations', to='sign.organization')),
|
||
],
|
||
options={
|
||
'ordering': ['-decision_date', 'reference', 'title'],
|
||
},
|
||
),
|
||
migrations.CreateModel(
|
||
name='RegulationArticle',
|
||
fields=[
|
||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||
('article_id', models.CharField(db_index=True, help_text='Ex: Art.1.1.1', max_length=50, verbose_name='Identifiant article')),
|
||
('article_number', models.CharField(blank=True, max_length=20, verbose_name="Numéro d'article")),
|
||
('text_fr', models.TextField(verbose_name='Texte FR')),
|
||
('text_nl', models.TextField(blank=True, verbose_name='Texte NL')),
|
||
('level', models.PositiveSmallIntegerField(default=1, verbose_name='Niveau')),
|
||
('ordering', models.PositiveIntegerField(db_index=True, default=0, verbose_name='Ordre')),
|
||
('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='children', to='sign.regulationarticle', verbose_name='Article parent')),
|
||
('regulation', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='custom_articles', to='sign.complementarypoliceregulation', verbose_name='Règlement (sous-article spécifique)')),
|
||
],
|
||
options={
|
||
'verbose_name': 'Article de règlement',
|
||
'verbose_name_plural': 'Articles de règlement',
|
||
'ordering': ['ordering', 'article_id'],
|
||
},
|
||
),
|
||
migrations.AddField(
|
||
model_name='complementarypoliceregulation',
|
||
name='selected_abrogation_articles',
|
||
field=models.ManyToManyField(blank=True, related_name='abrogation_article_regulations', to='sign.regulationarticle', verbose_name='Articles abrogés sélectionnés'),
|
||
),
|
||
migrations.AddField(
|
||
model_name='complementarypoliceregulation',
|
||
name='selected_articles',
|
||
field=models.ManyToManyField(blank=True, related_name='regulations', to='sign.regulationarticle', verbose_name='Articles sélectionnés'),
|
||
),
|
||
migrations.CreateModel(
|
||
name='RegulationArticleVoirie',
|
||
fields=[
|
||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||
('section', models.CharField(choices=[('nouvelle_disposition', 'Nouvelle disposition'), ('abrogation', 'Abrogation')], default='nouvelle_disposition', max_length=25, verbose_name='Section')),
|
||
('text_fr', models.TextField(blank=True, verbose_name='Description voirie (FR)')),
|
||
('text_nl', models.TextField(blank=True, verbose_name='Description voirie (NL)')),
|
||
('ordering', models.PositiveIntegerField(db_index=True, default=0, verbose_name='Ordre')),
|
||
('article', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='voiries', to='sign.regulationarticle', verbose_name='Article')),
|
||
('regulation', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='article_voiries', to='sign.complementarypoliceregulation', verbose_name='Règlement')),
|
||
],
|
||
options={
|
||
'verbose_name': "Voirie d'article de règlement",
|
||
'verbose_name_plural': "Voiries d'articles de règlement",
|
||
'ordering': ['ordering', 'id'],
|
||
},
|
||
),
|
||
migrations.CreateModel(
|
||
name='SignPanel',
|
||
fields=[
|
||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||
('code', models.CharField(max_length=50)),
|
||
('name_fr', models.CharField(blank=True, max_length=200, null=True)),
|
||
('name_nl', models.CharField(blank=True, max_length=200, null=True)),
|
||
('status', models.CharField(choices=[('to_be_approved', 'À approuver'), ('planned', 'Planifié'), ('active', 'Actif'), ('damaged', 'Endommagé'), ('to_replace', 'A remplacer'), ('voluntarily_out_of_service', 'Mis hors service volontairement'), ('removed', 'Enlevé'), ('archived', 'Archivé')], default='active', max_length=50)),
|
||
('obsolescence', models.CharField(blank=True, choices=[('good', 'Bon état'), ('medium', 'Moyen'), ('bad', 'Dégradé'), ('critical', 'Critique'), ('unknown', 'Inconnu')], default='unknown', null=True)),
|
||
('installation_date', models.DateTimeField(blank=True, null=True)),
|
||
('uninstallation_date', models.DateTimeField(blank=True, null=True)),
|
||
('serial_number', models.CharField(blank=True, max_length=200, null=True)),
|
||
('warranty_duration', models.IntegerField(blank=True, null=True, verbose_name='Duration of the warranty (months)')),
|
||
('last_inspection_date', models.DateTimeField(blank=True, null=True)),
|
||
('last_preventive_date', models.DateTimeField(blank=True, null=True)),
|
||
('last_corrective_date', models.DateTimeField(blank=True, null=True)),
|
||
('last_survey_date', models.DateTimeField(blank=True, null=True)),
|
||
('brand', models.CharField(blank=True, max_length=500, null=True)),
|
||
('marked_as_removed_date', models.DateTimeField(blank=True, null=True, verbose_name='Date de marquage comme retiré')),
|
||
('note', models.TextField(blank=True, null=True, verbose_name='Note')),
|
||
('validation_status', models.CharField(blank=True, choices=[('to_be_validated', 'À valider'), ('validated', 'Validé'), ('to_be_completed', 'À compléter'), ('rejected', 'Rejeté')], max_length=50, null=True, verbose_name='Statut de validation')),
|
||
('updated_at', models.DateTimeField(auto_now=True)),
|
||
('lon', models.FloatField(blank=True, null=True)),
|
||
('lat', models.FloatField(blank=True, null=True)),
|
||
('geom', django.contrib.gis.db.models.fields.PointField(blank=True, null=True, srid=3812)),
|
||
('geojson', models.TextField(blank=True, null=True)),
|
||
('vertical_order', models.IntegerField(blank=True, null=True)),
|
||
('signpanel_text', models.CharField(blank=True, choices=[('pole', 'Poteau'), ('lightingpole', "Poteau d'éclairage"), ('trafficlightpole', 'Poteau de signalisation lumineuse'), ('facade', 'Façade'), ('mast', 'Mât'), ('portico', 'Portique'), ('gallows', 'Potence'), ('hopper', 'Trémie'), ('other', 'Autre')], max_length=1000, null=True)),
|
||
('signpanel_value', models.FloatField(blank=True, null=True)),
|
||
('orientation', models.IntegerField(blank=True, help_text='Orientation en degrés (0-360)', null=True)),
|
||
('support_type', models.CharField(blank=True, choices=[('pole', 'Poteau'), ('lightingpole', "Poteau d'éclairage"), ('trafficlightpole', 'Poteau de signalisation lumineuse'), ('facade', 'Façade'), ('mast', 'Mât'), ('portico', 'Portique'), ('gallows', 'Potence'), ('hopper', 'Trémie'), ('other', 'Autre')], max_length=200, null=True)),
|
||
('is_temporary', models.BooleanField(default=False)),
|
||
('width', models.FloatField(blank=True, help_text='Largeur ou diamètre du panneau en centimètres. Par défaut: 50 cm', null=True, verbose_name='Largeur du panneau (cm)')),
|
||
('height', models.FloatField(blank=True, help_text='Hauteur du panneau en centimètres. Par défaut: égal à la largeur', null=True, verbose_name='Hauteur du panneau (cm)')),
|
||
('category', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='sign_app_panels', to='assets.assetcategory')),
|
||
('marked_as_removed_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(app_label)s_%(class)s_marked_as_removed', to=settings.AUTH_USER_MODEL, verbose_name='Marqué comme retiré par')),
|
||
('organization', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='sign_app_panels', to='sign.organization')),
|
||
('replaced_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='replaces', to='sign.signpanel', verbose_name='Remplacé par')),
|
||
('street', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='sign_app_panels', to='common.adrstreet')),
|
||
('updated_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(app_label)s_%(class)s_updated_by', to=settings.AUTH_USER_MODEL, verbose_name='Mis à jour par')),
|
||
],
|
||
),
|
||
migrations.CreateModel(
|
||
name='RegulationMeasurePanel',
|
||
fields=[
|
||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||
('section', models.CharField(choices=[('nouvelle_disposition', 'Nouvelle disposition'), ('abrogation', 'Abrogation')], default='nouvelle_disposition', max_length=25, verbose_name='Section')),
|
||
('article', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='measure_panels', to='sign.regulationarticle', verbose_name='Article / Mesure')),
|
||
('regulation', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='measure_panels', to='sign.complementarypoliceregulation', verbose_name='Règlement')),
|
||
('panel', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='regulation_measures', to='sign.signpanel', verbose_name='Panneau')),
|
||
],
|
||
options={
|
||
'verbose_name': "Panneau d'une mesure de règlement",
|
||
'verbose_name_plural': 'Panneaux de mesures de règlement',
|
||
'ordering': ['regulation', 'article__ordering', 'panel__code'],
|
||
},
|
||
),
|
||
migrations.AddField(
|
||
model_name='complementarypoliceregulation',
|
||
name='abrogated_panels',
|
||
field=models.ManyToManyField(blank=True, related_name='abrogation_regulations', to='sign.signpanel', verbose_name='Panneaux abrogés'),
|
||
),
|
||
migrations.AddField(
|
||
model_name='complementarypoliceregulation',
|
||
name='panels',
|
||
field=models.ManyToManyField(blank=True, related_name='sign_app_regulations', to='sign.signpanel'),
|
||
),
|
||
migrations.CreateModel(
|
||
name='SignPanelModel',
|
||
fields=[
|
||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||
('code', models.CharField(max_length=50)),
|
||
('name_fr', models.CharField(blank=True, max_length=200, null=True)),
|
||
('name_nl', models.CharField(blank=True, max_length=200, null=True)),
|
||
('description', models.TextField(blank=True, null=True)),
|
||
('brand', models.CharField(blank=True, max_length=500, null=True)),
|
||
('shape', models.CharField(blank=True, max_length=200, null=True)),
|
||
('color', models.CharField(blank=True, max_length=200, null=True)),
|
||
('ral', models.CharField(blank=True, max_length=200, null=True)),
|
||
('height', models.FloatField(blank=True, null=True)),
|
||
('width', models.FloatField(blank=True, null=True)),
|
||
('diameter', models.FloatField(blank=True, null=True)),
|
||
('material', models.CharField(blank=True, max_length=200, null=True)),
|
||
('reflective', models.BooleanField(default=False)),
|
||
('illuminated', models.BooleanField(default=False)),
|
||
('dynamic', models.BooleanField(default=False)),
|
||
('category', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='sign_app_panel_models', to='assets.assetcategory')),
|
||
],
|
||
options={
|
||
'verbose_name': 'Modèle de panneau (Sign)',
|
||
'verbose_name_plural': 'Modèles de panneaux (Sign)',
|
||
},
|
||
),
|
||
migrations.AddField(
|
||
model_name='signpanel',
|
||
name='model',
|
||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='sign.signpanelmodel'),
|
||
),
|
||
migrations.AddField(
|
||
model_name='signpanel',
|
||
name='signpanel_type',
|
||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='sign.signpaneltype'),
|
||
),
|
||
migrations.CreateModel(
|
||
name='SignPanelTypeArticle',
|
||
fields=[
|
||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||
('article', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='panel_types', to='sign.regulationarticle', verbose_name='Article de règlement')),
|
||
('panel_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='regulation_articles', to='sign.signpaneltype', verbose_name='Type de panneau')),
|
||
],
|
||
options={
|
||
'verbose_name': 'Article applicable à un type de panneau',
|
||
'verbose_name_plural': 'Articles applicables aux types de panneaux',
|
||
'ordering': ['panel_type__code', 'article__ordering'],
|
||
},
|
||
),
|
||
migrations.CreateModel(
|
||
name='SignPole',
|
||
fields=[
|
||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||
('code', models.CharField(max_length=50)),
|
||
('name_fr', models.CharField(blank=True, max_length=200, null=True)),
|
||
('name_nl', models.CharField(blank=True, max_length=200, null=True)),
|
||
('status', models.CharField(choices=[('to_be_approved', 'À approuver'), ('planned', 'Planifié'), ('active', 'Actif'), ('damaged', 'Endommagé'), ('to_replace', 'A remplacer'), ('voluntarily_out_of_service', 'Mis hors service volontairement'), ('removed', 'Enlevé'), ('archived', 'Archivé')], default='active', max_length=50)),
|
||
('obsolescence', models.CharField(blank=True, choices=[('good', 'Bon état'), ('medium', 'Moyen'), ('bad', 'Dégradé'), ('critical', 'Critique'), ('unknown', 'Inconnu')], default='unknown', null=True)),
|
||
('installation_date', models.DateTimeField(blank=True, null=True)),
|
||
('uninstallation_date', models.DateTimeField(blank=True, null=True)),
|
||
('serial_number', models.CharField(blank=True, max_length=200, null=True)),
|
||
('warranty_duration', models.IntegerField(blank=True, null=True, verbose_name='Duration of the warranty (months)')),
|
||
('last_inspection_date', models.DateTimeField(blank=True, null=True)),
|
||
('last_preventive_date', models.DateTimeField(blank=True, null=True)),
|
||
('last_corrective_date', models.DateTimeField(blank=True, null=True)),
|
||
('last_survey_date', models.DateTimeField(blank=True, null=True)),
|
||
('brand', models.CharField(blank=True, max_length=500, null=True)),
|
||
('marked_as_removed_date', models.DateTimeField(blank=True, null=True, verbose_name='Date de marquage comme retiré')),
|
||
('note', models.TextField(blank=True, null=True, verbose_name='Note')),
|
||
('validation_status', models.CharField(blank=True, choices=[('to_be_validated', 'À valider'), ('validated', 'Validé'), ('to_be_completed', 'À compléter'), ('rejected', 'Rejeté')], max_length=50, null=True, verbose_name='Statut de validation')),
|
||
('updated_at', models.DateTimeField(auto_now=True)),
|
||
('lon', models.FloatField(blank=True, null=True)),
|
||
('lat', models.FloatField(blank=True, null=True)),
|
||
('geom', django.contrib.gis.db.models.fields.PointField(blank=True, null=True, srid=3812)),
|
||
('geojson', models.TextField(blank=True, null=True)),
|
||
('orientation', models.IntegerField(blank=True, default=90, help_text='Orientation en degrés (0-360)', null=True)),
|
||
('category', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='sign_app_poles', to='assets.assetcategory')),
|
||
('marked_as_removed_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(app_label)s_%(class)s_marked_as_removed', to=settings.AUTH_USER_MODEL, verbose_name='Marqué comme retiré par')),
|
||
('organization', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='sign_app_poles', to='sign.organization')),
|
||
('replaced_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='replaces', to='sign.signpole', verbose_name='Remplacé par')),
|
||
('street', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='sign_app_poles', to='common.adrstreet')),
|
||
('updated_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(app_label)s_%(class)s_updated_by', to=settings.AUTH_USER_MODEL, verbose_name='Mis à jour par')),
|
||
],
|
||
),
|
||
migrations.AddField(
|
||
model_name='signpanel',
|
||
name='pole',
|
||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='sign_app_panels', to='sign.signpole'),
|
||
),
|
||
migrations.CreateModel(
|
||
name='SignPoleModel',
|
||
fields=[
|
||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||
('code', models.CharField(max_length=50)),
|
||
('name_fr', models.CharField(blank=True, max_length=200, null=True)),
|
||
('name_nl', models.CharField(blank=True, max_length=200, null=True)),
|
||
('description', models.TextField(blank=True, null=True)),
|
||
('brand', models.CharField(blank=True, max_length=500, null=True)),
|
||
('color', models.CharField(blank=True, max_length=200, null=True)),
|
||
('ral', models.CharField(blank=True, max_length=200, null=True)),
|
||
('height', models.FloatField(blank=True, null=True)),
|
||
('diameter', models.FloatField(blank=True, null=True)),
|
||
('material', models.CharField(blank=True, max_length=200, null=True)),
|
||
('galvanized', models.BooleanField(default=False)),
|
||
('category', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='sign_app_pole_models', to='assets.assetcategory')),
|
||
],
|
||
options={
|
||
'verbose_name': 'Modèle de poteau (Sign)',
|
||
'verbose_name_plural': 'Modèles de poteaux (Sign)',
|
||
},
|
||
),
|
||
migrations.AddField(
|
||
model_name='signpole',
|
||
name='model',
|
||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='sign.signpolemodel'),
|
||
),
|
||
migrations.CreateModel(
|
||
name='SignStreet',
|
||
fields=[
|
||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||
('code', models.CharField(max_length=50)),
|
||
('name_fr', models.CharField(blank=True, max_length=200, null=True)),
|
||
('name_nl', models.CharField(blank=True, max_length=200, null=True)),
|
||
('lon', models.FloatField(blank=True, null=True)),
|
||
('lat', models.FloatField(blank=True, null=True)),
|
||
('geojson', models.TextField(blank=True, null=True)),
|
||
('updated_at', models.DateTimeField(auto_now=True)),
|
||
('geom', django.contrib.gis.db.models.fields.MultiPolygonField(blank=True, null=True, srid=3812)),
|
||
('road_code', models.CharField(blank=True, max_length=50, null=True)),
|
||
('section_code', models.CharField(blank=True, max_length=50, null=True)),
|
||
('street_level', models.CharField(blank=True, max_length=50, null=True)),
|
||
('municipality', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='sign_app_streets', to='common.municipality')),
|
||
('updated_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(app_label)s_%(class)s_location_updated_by', to=settings.AUTH_USER_MODEL, verbose_name='Mis à jour par')),
|
||
],
|
||
options={
|
||
'ordering': ['code'],
|
||
'abstract': False,
|
||
},
|
||
),
|
||
migrations.CreateModel(
|
||
name='SignStreetDocument',
|
||
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=sign.models.upload_to_signstreet, verbose_name='Fichier')),
|
||
('thumbnail', models.ImageField(blank=True, max_length=255, null=True, storage=common.storages.PrivateMediaStorage(), upload_to=sign.models.upload_to_signstreet)),
|
||
('document_type', models.CharField(choices=[('as_built', 'As Built'), ('other', 'Autre')], default='other', max_length=50, verbose_name='Type de document')),
|
||
('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')),
|
||
('organization', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='sign_street_documents', to='sign.organization')),
|
||
('street', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='documents', to='sign.signstreet', verbose_name='Associated Street')),
|
||
('uploaded_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='uploaded_sign_street_documents_sign', to=settings.AUTH_USER_MODEL, verbose_name='Ajouté par')),
|
||
],
|
||
options={
|
||
'ordering': ['upload_date'],
|
||
'abstract': False,
|
||
},
|
||
),
|
||
migrations.AddConstraint(
|
||
model_name='regulationarticle',
|
||
constraint=models.UniqueConstraint(condition=models.Q(('regulation', None)), fields=('article_id',), name='sign_regulationarticle_global_unique_article_id'),
|
||
),
|
||
migrations.AlterUniqueTogether(
|
||
name='regulationmeasurepanel',
|
||
unique_together={('regulation', 'article', 'section', 'panel')},
|
||
),
|
||
migrations.AlterUniqueTogether(
|
||
name='signpaneltypearticle',
|
||
unique_together={('panel_type', 'article')},
|
||
),
|
||
migrations.AddIndex(
|
||
model_name='signpanel',
|
||
index=models.Index(fields=['code'], name='sign_signpa_code_65ed88_idx'),
|
||
),
|
||
migrations.AddIndex(
|
||
model_name='signpole',
|
||
index=models.Index(fields=['code'], name='sign_signpo_code_16a79b_idx'),
|
||
),
|
||
]
|