85 lines
6.7 KiB
Python
85 lines
6.7 KiB
Python
# 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/<widget_code>.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',
|
|
},
|
|
),
|
|
]
|