# Generated by Django 6.0.7 on 2026-07-22 13:42 import django.db.models.deletion from django.db import migrations, models class Migration(migrations.Migration): initial = True dependencies = [ ('common', '0001_initial'), ('contracts', '0001_initial'), ] operations = [ migrations.CreateModel( name='HomeWidget', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('widget_code', models.CharField(choices=[('intervention_stats', 'Statistiques interventions'), ('contracts_summary', 'Résumé contrats'), ('map_today', 'Carte du jour'), ('operator_shortcuts', 'Raccourcis opérateur'), ('assets_links', 'Liens assets'), ('stock_summary', 'Résumé stock'), ('observer_shortcuts', 'Raccourcis observateur'), ('incident_counter', 'Compteur incidents à traiter'), ('intervention_to_verify', 'Compteur interventions à vérifier'), ('intervention_to_plan', 'Compteur interventions à planifier'), ('intervention_to_approve', 'Compteur interventions à approuver'), ('intervention_checked_to_approve', 'Compteur interventions vérifiées à approuver'), ('intervention_finished', 'Compteur interventions terminées'), ('stock_actions', 'Actions stock')], max_length=50, unique=True, verbose_name='Code du widget')), ('default_template_override', models.CharField(blank=True, help_text='Chemin du template optionnel (sinon home/widgets/.html)', max_length=255, null=True, verbose_name='Template par défaut (surcharge)')), ('is_active', models.BooleanField(default=True, verbose_name='Actif')), ], options={ 'verbose_name': 'Widget home', 'verbose_name_plural': 'Widgets home', 'ordering': ['widget_code'], }, ), migrations.CreateModel( name='TeambuildingVote', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('voter_name', models.CharField(blank=True, max_length=100, null=True, verbose_name='Nom (optionnel)')), ('vote_gael', models.IntegerField(default=0, verbose_name="La journée 'Gaël Non Di Dju'")), ('vote_charly', models.IntegerField(default=0, verbose_name="La journée 'La cité de Charly'")), ('vote_tequila', models.IntegerField(default=0, verbose_name="La journée 'Tequila Cadena'")), ('vote_vivien', models.IntegerField(default=0, verbose_name="La journée 'Vivien de La Grande Propreté'")), ('created_at', models.DateTimeField(auto_now_add=True)), ], options={ 'verbose_name': 'Vote Teambuilding', 'verbose_name_plural': 'Votes Teambuilding', }, ), migrations.CreateModel( name='HomeWidgetConditionGroup', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('label', models.CharField(help_text="Libellé informatif (ex: 'Stock manager - priorité haute')", max_length=255, verbose_name='Libellé')), ('order', models.PositiveIntegerField(help_text='Les widgets ayant le même ordre seront placés dans la même ligne Bootstrap.', verbose_name='Ordre de la ligne')), ('col_width', models.PositiveSmallIntegerField(default=12, help_text='Nombre de colonnes Bootstrap (1-12). 12 = pleine largeur, 6 = demi-largeur, 4 = un tiers, etc.', verbose_name='Largeur (colonnes Bootstrap)')), ('col_order', models.PositiveIntegerField(default=0, help_text='Position du widget dans sa ligne (parmi les widgets du même ordre). Les valeurs les plus faibles apparaissent en premier.', verbose_name='Ordre dans la ligne')), ('priority', models.PositiveIntegerField(default=0, help_text="Ordre d'évaluation des groupes (le premier qui matche l'emporte)", verbose_name='Priorité')), ('template_override', models.CharField(blank=True, help_text='Surcharge du template pour ce groupe spécifiquement', max_length=255, null=True, verbose_name='Template (surcharge)')), ('is_active', models.BooleanField(default=True, verbose_name='Actif')), ('widget', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='condition_groups', to='home.homewidget', verbose_name='Widget')), ], options={ 'verbose_name': 'Groupe de conditions', 'verbose_name_plural': 'Groupes de conditions', 'ordering': ['widget', 'priority'], }, ), migrations.CreateModel( name='HomeWidgetCondition', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('condition_type', models.CharField(choices=[('role', 'Rôle'), ('team', 'Équipe'), ('contract', 'Contrat'), ('thematic', 'Thématique'), ('is_intern', 'Statut interne')], max_length=20, verbose_name='Type de condition')), ('is_intern', models.BooleanField(blank=True, help_text="Utilisé si type = 'is_intern'", null=True, verbose_name='Statut interne')), ('is_negated', models.BooleanField(default=False, help_text='Inverser le sens de la condition (ex: NOT role=Admin)', verbose_name='NOT')), ('is_active', models.BooleanField(default=True, verbose_name='Actif')), ('contract', models.ForeignKey(blank=True, help_text="Utilisé si type = 'contract'", null=True, on_delete=django.db.models.deletion.CASCADE, to='contracts.contract', verbose_name='Contrat')), ('role', models.ForeignKey(blank=True, help_text="Utilisé si type = 'role'", null=True, on_delete=django.db.models.deletion.CASCADE, to='common.role', verbose_name='Rôle')), ('team', models.ForeignKey(blank=True, help_text="Utilisé si type = 'team'", null=True, on_delete=django.db.models.deletion.CASCADE, to='contracts.companyteam', verbose_name='Équipe')), ('thematic', models.ForeignKey(blank=True, help_text="Utilisé si type = 'thematic'", null=True, on_delete=django.db.models.deletion.CASCADE, to='common.thematic', verbose_name='Thématique')), ('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='conditions', to='home.homewidgetconditiongroup', verbose_name='Groupe')), ], options={ 'verbose_name': 'Condition', 'verbose_name_plural': 'Conditions', }, ), ]