152 lines
11 KiB
Python
152 lines
11 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 observations.models
|
|
from django.conf import settings
|
|
from django.db import migrations, models
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
|
|
initial = True
|
|
|
|
dependencies = [
|
|
('assets', '0003_initial'),
|
|
('interventions', '0001_initial'),
|
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
|
]
|
|
|
|
operations = [
|
|
migrations.CreateModel(
|
|
name='ObservationAttributeChoice',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('value', models.CharField(help_text='Valeur technique stockée (ne pas modifier après création)', max_length=100, verbose_name='Valeur (clé)')),
|
|
('label_fr', models.CharField(max_length=255, verbose_name='Label (FR)')),
|
|
('label_nl', models.CharField(blank=True, max_length=255, null=True, verbose_name='Label (NL)')),
|
|
('bootstrap_icon', models.CharField(blank=True, help_text='Ex: bi-check-circle, bi-x-circle, bi-dash-circle', max_length=50, null=True, verbose_name='Icône Bootstrap')),
|
|
('bootstrap_color', models.CharField(choices=[('primary', 'Primary'), ('secondary', 'Secondary'), ('success', 'Success'), ('danger', 'Danger'), ('warning', 'Warning'), ('info', 'Info'), ('light', 'Light'), ('dark', 'Dark')], default='primary', max_length=20, verbose_name='Couleur Bootstrap')),
|
|
('image', models.ImageField(blank=True, help_text='Image optionnelle pour représenter ce choix (pour usage mobile)', null=True, upload_to=observations.models.attribute_choice_image_upload_path, verbose_name='Image')),
|
|
('order', models.PositiveIntegerField(default=0, verbose_name='Ordre')),
|
|
('is_active', models.BooleanField(default=True, verbose_name='Actif')),
|
|
],
|
|
options={
|
|
'verbose_name': "Choix d'attribut",
|
|
'verbose_name_plural': "Choix d'attributs",
|
|
'ordering': ['choice_set', 'order'],
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name='ObservationAttributeChoiceSet',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('name', models.CharField(max_length=255, unique=True, verbose_name='Nom')),
|
|
('description', models.TextField(blank=True, null=True, verbose_name='Description')),
|
|
('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': "Ensemble de choix d'attribut",
|
|
'verbose_name_plural': "Ensembles de choix d'attributs",
|
|
'ordering': ['name'],
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name='ObservationChecklistResponse',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('value_boolean', models.BooleanField(blank=True, null=True, verbose_name='Valeur (Oui/Non)')),
|
|
('value_text', models.TextField(blank=True, null=True, verbose_name='Valeur (Texte)')),
|
|
('value_number', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='Valeur (Nombre)')),
|
|
('value_choice', models.CharField(blank=True, max_length=255, null=True, verbose_name='Valeur (Choix simple)')),
|
|
('value_choices', models.JSONField(blank=True, help_text='Liste des clés de choix sélectionnées', null=True, verbose_name='Valeurs (Choix multiples)')),
|
|
('comment', models.TextField(blank=True, null=True, verbose_name='Commentaire')),
|
|
('created_at', models.DateTimeField(auto_now_add=True)),
|
|
('updated_at', models.DateTimeField(auto_now=True)),
|
|
],
|
|
options={
|
|
'verbose_name': 'Réponse de checklist',
|
|
'verbose_name_plural': 'Réponses de checklist',
|
|
'ordering': ['observation', 'checklist_item__order'],
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name='ObservationComment',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('comment', models.TextField()),
|
|
('created_at', models.DateTimeField(auto_now_add=True)),
|
|
],
|
|
),
|
|
migrations.CreateModel(
|
|
name='ObservationPhoto',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('photo', models.ImageField(storage=common.storages.PrivateMediaStorage(), upload_to=observations.models.observation_photo_upload_path)),
|
|
('thumbnail', models.ImageField(blank=True, max_length=255, null=True, storage=common.storages.PrivateMediaStorage(), upload_to=observations.models.observation_photo_upload_path, verbose_name='Miniature')),
|
|
],
|
|
),
|
|
migrations.CreateModel(
|
|
name='ChecklistTemplate',
|
|
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(blank=True, max_length=255, null=True, verbose_name='Nom (NL)')),
|
|
('description', models.TextField(blank=True, null=True, verbose_name='Description')),
|
|
('observation_type', models.CharField(choices=[('incident', 'Incident'), ('inventory', 'Inventaire'), ('remark', 'Remarque')], default='inventory', max_length=20, verbose_name="Type d'observation")),
|
|
('is_active', models.BooleanField(default=True, verbose_name='Actif')),
|
|
('created_at', models.DateTimeField(auto_now_add=True)),
|
|
('updated_at', models.DateTimeField(auto_now=True)),
|
|
('category', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='checklist_templates', to='assets.assetcategory', verbose_name="Catégorie d'asset")),
|
|
],
|
|
options={
|
|
'verbose_name': 'Template de checklist',
|
|
'verbose_name_plural': 'Templates de checklist',
|
|
'ordering': ['category', 'name_fr'],
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name='ChecklistItem',
|
|
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(blank=True, max_length=255, null=True, verbose_name='Nom (NL)')),
|
|
('description_fr', models.TextField(blank=True, null=True, verbose_name='Description (FR)')),
|
|
('description_nl', models.TextField(blank=True, null=True, verbose_name='Description (NL)')),
|
|
('item_type', models.CharField(choices=[('boolean', 'Oui/Non'), ('text', 'Texte libre'), ('number', 'Nombre'), ('choice', 'Choix simple'), ('choice_multiple', 'Choix multiple')], default='boolean', max_length=20, verbose_name='Type de réponse')),
|
|
('choices_fr', models.TextField(blank=True, help_text='Alternative aux ensembles de choix. Ex: Bon,Moyen,Mauvais', null=True, verbose_name='Options FR (séparées par des virgules)')),
|
|
('choices_nl', models.TextField(blank=True, help_text='Alternative aux ensembles de choix. Ex: Goed,Gemiddeld,Slecht', null=True, verbose_name='Options NL (séparées par des virgules)')),
|
|
('choices_icons', models.TextField(blank=True, help_text='Icônes pour chaque option. Ex: bi-check-circle,bi-dash-circle,bi-x-circle', null=True, verbose_name='Icônes Bootstrap (séparées par des virgules)')),
|
|
('choices_colors', models.TextField(blank=True, help_text='Couleurs pour chaque option. Ex: success,warning,danger (défaut: primary)', null=True, verbose_name='Couleurs Bootstrap (séparées par des virgules)')),
|
|
('is_required', models.BooleanField(default=False, verbose_name='Obligatoire')),
|
|
('order', models.PositiveIntegerField(default=0, verbose_name="Ordre d'affichage")),
|
|
('template', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='items', to='observations.checklisttemplate', verbose_name='Template')),
|
|
],
|
|
options={
|
|
'verbose_name': 'Élément de checklist',
|
|
'verbose_name_plural': 'Éléments de checklist',
|
|
'ordering': ['template', 'order', 'name_fr'],
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name='Observation',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('code', models.CharField(blank=True, max_length=20, null=True, unique=True, verbose_name='Code')),
|
|
('description', models.TextField(blank=True, null=True)),
|
|
('latitude', models.FloatField()),
|
|
('longitude', models.FloatField()),
|
|
('address', models.CharField(blank=True, max_length=1024, null=True)),
|
|
('created_at', models.DateTimeField(auto_now_add=True)),
|
|
('observation_type', models.CharField(choices=[('incident', 'Incident'), ('inventory', 'Inventaire'), ('remark', 'Remarque')], default='incident', max_length=20)),
|
|
('geom', django.contrib.gis.db.models.fields.PointField(blank=True, null=True, srid=3812)),
|
|
('status', models.CharField(choices=[('in_preparation', 'En préparation'), ('to_process', 'À traiter'), ('in_progress', 'En cours'), ('processed', 'Traité'), ('not_relevant', 'Non relevant'), ('to_redirect', 'À rediriger'), ('duplicate', 'Doublon'), ('closed', 'Clôturé'), ('archived', 'Archivé')], default='in_preparation', max_length=20)),
|
|
('category', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='observations', to='assets.assetcategory')),
|
|
('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='observations', to=settings.AUTH_USER_MODEL)),
|
|
('intervention', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='observations', to='interventions.intervention')),
|
|
],
|
|
),
|
|
]
|