125 lines
12 KiB
Python
125 lines
12 KiB
Python
# Generated by Django 6.0.7 on 2026-08-07 07:54
|
|
|
|
import assets.models.core
|
|
import django.contrib.gis.db.models.fields
|
|
import django.db.models.deletion
|
|
import django.utils.timezone
|
|
from django.conf import settings
|
|
from django.db import migrations, models
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
|
|
dependencies = [
|
|
('assets', '0007_outdoorlocation_outdoorasset_outdoorlocationdocument'),
|
|
('contenttypes', '0002_remove_content_type_name'),
|
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
|
]
|
|
|
|
operations = [
|
|
migrations.CreateModel(
|
|
name='AssetInspection',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('asset_object_id', models.PositiveIntegerField(verbose_name="ID de l'asset")),
|
|
('inspection_date', models.DateTimeField(default=django.utils.timezone.now, verbose_name="Date d'inspection")),
|
|
('result_status', models.CharField(choices=[('compliant', 'Conforme'), ('non_compliant', 'Non conforme / Anomalie'), ('updated', 'Données corrigées'), ('damaged', 'Endommagé'), ('missing', 'Absent / Retiré')], default='compliant', max_length=50, verbose_name='Résultat du contrôle')),
|
|
('verified_standard_stand_count', models.IntegerField(blank=True, null=True, verbose_name="Nombre d'arceaux classiques constaté")),
|
|
('verified_cargo_stand_count', models.IntegerField(blank=True, null=True, verbose_name="Nombre d'arceaux cargo constaté")),
|
|
('verified_stand_type', models.CharField(blank=True, max_length=50, null=True, verbose_name="Type d'arceau constaté")),
|
|
('verified_has_scooter_drop_zone', models.BooleanField(blank=True, null=True, verbose_name='Drop zone trottinette constatée')),
|
|
('verified_marking_quality', models.CharField(blank=True, max_length=50, null=True, verbose_name='Qualité du marquage constatée')),
|
|
('verified_obsolescence', models.CharField(blank=True, max_length=50, null=True, verbose_name="État d'obsolescence constaté")),
|
|
('notes', models.TextField(blank=True, null=True, verbose_name='Remarques / Constats')),
|
|
('apply_changes_to_asset', models.BooleanField(default=True, verbose_name="Appliquer directement les modifications à l'asset")),
|
|
('created_at', models.DateTimeField(auto_now_add=True)),
|
|
('updated_at', models.DateTimeField(auto_now=True)),
|
|
('asset_content_type', models.ForeignKey(limit_choices_to={'app_label': 'assets'}, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype', verbose_name="Type d'asset")),
|
|
('inspector', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='asset_inspections', to=settings.AUTH_USER_MODEL, verbose_name='Inspecteur / Vérificateur')),
|
|
],
|
|
options={
|
|
'verbose_name': "Inspection / Vérification d'asset",
|
|
'verbose_name_plural': "Inspections / Vérifications d'assets",
|
|
'ordering': ['-inspection_date'],
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name='ParkingLocation',
|
|
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, verbose_name='Emprise cartographique')),
|
|
('description', models.TextField(blank=True, null=True, verbose_name='Description')),
|
|
('address', models.CharField(blank=True, max_length=500, null=True, verbose_name='Adresse')),
|
|
('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={
|
|
'verbose_name': 'Zone de stationnement',
|
|
'verbose_name_plural': 'Zones de stationnement',
|
|
'ordering': ['code', 'name_fr'],
|
|
},
|
|
bases=(assets.models.core.GeoSyncMixin, models.Model),
|
|
),
|
|
migrations.CreateModel(
|
|
name='ParkingSpot',
|
|
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)),
|
|
('geojson', models.TextField(blank=True, null=True)),
|
|
('geom', django.contrib.gis.db.models.fields.PolygonField(blank=True, null=True, srid=3812, verbose_name='Emprise polygone')),
|
|
('spot_type', models.CharField(choices=[('bicycle', 'Stationnement vélo'), ('scooter_drop_zone', 'Drop zone trottinettes / EDPM'), ('cargo_bike', 'Stationnement vélo cargo'), ('delivery', 'Zone de livraison / Chargement-déchargement'), ('pmr', 'Emplacement PMR'), ('kiss_and_ride', 'Arrêt minute / Court-durée (CD)'), ('car_parking', 'Stationnement automobile'), ('carsharing', 'Autopartage'), ('ev_charging', 'Recharge véhicule électrique'), ('other', 'Autre')], default='bicycle', max_length=50, verbose_name="Type d'emplacement")),
|
|
('standard_stand_count', models.IntegerField(default=0, verbose_name="Nombre d'arceaux vélos classiques")),
|
|
('cargo_stand_count', models.IntegerField(default=0, verbose_name="Nombre d'arceaux vélos cargo")),
|
|
('other_stand_count', models.IntegerField(default=0, verbose_name='Autres arceaux / agencements')),
|
|
('stand_type', models.CharField(choices=[('normal', 'Arceau standard (U inversé)'), ('cargo', 'Arceau vélo cargo'), ('mixed', 'Mixte (normal et cargo)'), ('rack', 'Râteau / Pince-roue'), ('box', 'Box / Abri sécurisé'), ('other', 'Autre')], default='normal', max_length=50, verbose_name="Type d'arceau principal")),
|
|
('has_scooter_drop_zone', models.BooleanField(default=False, verbose_name='Drop zone trottinettes / EDPM')),
|
|
('scooter_capacity', models.IntegerField(blank=True, null=True, verbose_name='Capacité estimée trottinettes')),
|
|
('capacity', models.IntegerField(blank=True, null=True, verbose_name='Capacité générale (nbr véhicules)')),
|
|
('is_paid', models.BooleanField(default=False, verbose_name='Payant')),
|
|
('time_limit_minutes', models.IntegerField(blank=True, null=True, verbose_name='Durée maximale (minutes)')),
|
|
('marking_quality', models.CharField(choices=[('good', 'Bon état'), ('medium', 'Moyen'), ('damaged', 'Dégradé'), ('missing', 'Absent / Effacé')], default='good', max_length=50, verbose_name='Qualité du marquage au sol')),
|
|
('is_temporary', models.BooleanField(default=False, verbose_name='Temporaire (chantier/événement)')),
|
|
('is_compliant', models.BooleanField(default=True, verbose_name='Conforme aux spécifications')),
|
|
('non_compliance_reason', models.TextField(blank=True, null=True, verbose_name='Motif de non-conformité')),
|
|
('category', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='assets.assetcategory')),
|
|
('location', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='parking_spots', to='assets.parkinglocation', verbose_name='Zone / Localisation parente')),
|
|
('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')),
|
|
('panels', models.ManyToManyField(blank=True, related_name='parking_spots_attached_new', to='assets.signpanel', verbose_name='Panneaux de signalisation associés')),
|
|
('poles', models.ManyToManyField(blank=True, related_name='parking_spots_attached_new', to='assets.signpole', verbose_name='Poteaux de signalisation associés')),
|
|
('replaced_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='replaces', to='assets.parkingspot', verbose_name='Remplacé par')),
|
|
('street', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='parking_spots_new', to='assets.signstreet', verbose_name='Rue')),
|
|
('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')),
|
|
],
|
|
options={
|
|
'verbose_name': 'Emplacement de stationnement',
|
|
'verbose_name_plural': 'Emplacements de stationnement',
|
|
'ordering': ['code', 'name_fr'],
|
|
},
|
|
bases=(assets.models.core.GeoSyncMixin, models.Model),
|
|
),
|
|
]
|