class Migration(migrations.Migration): dependencies = [("events", "0018_rename_indices")] operations = [ migrations.AlterField( model_name="calendar", name="image", field=stdimage.models.StdImageField( blank=True, default="", upload_to=dynamic_filenames.FilePattern( filename_pattern= "{app_label}/{model_name}/{instance.name:slug}{ext}"), verbose_name="bannière", ), preserve_default=False, ), migrations.AlterField( model_name="event", name="image", field=stdimage.models.StdImageField( blank=True, default="", help_text= "L'image à utiliser pour l'affichage sur la page, comme miniature dans les listes, et pour le partage sur les réseaux sociaux. Elle doit faire au minimum 1200 pixels de large, et 630 de haut. Préférer un rapport largeur/hauteur de 2 (deux fois plus large que haut)?", upload_to=dynamic_filenames.FilePattern( filename_pattern= "{app_label}/{model_name}/{instance.id}/banner{ext}"), validators=[stdimage.validators.MinSizeValidator(1200, 630)], verbose_name="image", ), preserve_default=False, ), ]
class Migration(migrations.Migration): dependencies = [("events", "0027_eventimage")] operations = [ migrations.AlterField( model_name="event", name="image", field=stdimage.models.StdImageField( blank=True, help_text="Vous pouvez ajouter une image de bannière : elle apparaîtra sur la page, et sur les réseaux sociaux en cas de partage. Préférez une image à peu près deux fois plus large que haute. Elle doit faire au minimum 1200 pixels de large et 630 de haut pour une qualité optimale.", upload_to=dynamic_filenames.FilePattern( filename_pattern="{app_label}/{model_name}/{instance.id}/banner{ext}" ), verbose_name="image", ), ), migrations.AlterField( model_name="event", name="report_image", field=stdimage.models.StdImageField( blank=True, help_text="Cette image apparaîtra en tête de votre compte-rendu, et dans les partages que vous ferez du compte-rendu sur les réseaux sociaux.", upload_to=dynamic_filenames.FilePattern( filename_pattern="{app_label}/{model_name}/{instance.id}/report_banner{ext}" ), verbose_name="image de couverture", ), ), ]
class Migration(migrations.Migration): initial = True dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.CreateModel( name='Talk', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('title', models.CharField(max_length=300)), ('description', models.TextField(null=True)), ('audio_original', models.FileField( blank=True, null=True, upload_to=dynamic_filenames.FilePattern( filename_pattern='pi'), validators=[ django.core.validators.FileExtensionValidator(['mp3']) ])), ('audio_cleaned', models.FileField( blank=True, null=True, upload_to=dynamic_filenames.FilePattern( filename_pattern='pi'), validators=[ django.core.validators.FileExtensionValidator(['mp3']) ])), ('created_at', models.DateTimeField(auto_now_add=True)), ('updated_at', models.DateTimeField(auto_now=True)), ('created_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='created_by', to=settings.AUTH_USER_MODEL)), ('updated_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='updated_by', to=settings.AUTH_USER_MODEL)), ], ), ]
class Migration(migrations.Migration): dependencies = [ ("people", "0003_segments"), ] operations = [ migrations.AddField( model_name="person", name="display_name", field=models.CharField(default="", max_length=255, verbose_name="nom d'affichage"), preserve_default=False, ), migrations.RunSQL( """ UPDATE people_person SET display_name = UPPER( CASE WHEN first_name <> '' AND last_name <> '' THEN concat( SUBSTRING(first_name, 1, 1), SUBSTRING(last_name, 1, 1) ) WHEN first_name <> '' THEN SUBSTRING(first_name, 1, 2) WHEN last_name <> '' THEN SUBSTRING(last_name, 1, 2) WHEN ( SELECT address FROM people_personemail WHERE people_personemail.person_id = people_person.id LIMIT 1 ) IS NOT NULL THEN ( SELECT SUBSTRING(address, 1, 2) FROM people_personemail WHERE people_personemail.person_id = people_person.id LIMIT 1 ) ELSE '?' END ) """, "", ), migrations.AddField( model_name="person", name="image", field=stdimage.models.StdImageField( blank=True, help_text="Vous pouvez ajouter une image publique de profil", upload_to=dynamic_filenames.FilePattern( filename_pattern= "{app_label}/{model_name}/{instance.id}{ext}"), validators=[ django.core.validators.FileExtensionValidator( allowed_extensions=["jpg", "jpeg", "gif", "png"]) ], verbose_name="image de profil", ), ), ]
class Migration(migrations.Migration): dependencies = [ ("data_france", "0029_deputes_europeens"), ("elus", "0030_auto_20210726_1656"), ] operations = [ migrations.AlterField( model_name="rechercheparrainage", name="formulaire", field=models.FileField( blank=True, null=True, upload_to=dynamic_filenames.FilePattern( filename_pattern="elus/parrainages/{uuid:.30base32}{ext}"), verbose_name="Formulaire de promesse signé", ), ), migrations.AlterField( model_name="rechercheparrainage", name="maire", field=models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="parrainages", related_query_name="parrainage", to="data_france.elumunicipal", verbose_name="Maire", ), ), ]
class VersionDocument(models.Model): document = models.ForeignKey( Document, blank=False, on_delete=models.CASCADE, related_name="versions", related_query_name="version", ) date = models.DateTimeField( "Date de téléchargement", auto_now_add=True, editable=False ) titre = models.CharField( verbose_name="Titre de la version", max_length=200, blank=False ) fichier = models.FileField( verbose_name="Fichier pour cette version", null=False, blank=False, upload_to=dynamic_filenames.FilePattern( filename_pattern="gestion/documents/{uuid:.2base32}/{uuid}{ext}" ), ) class Meta: verbose_name = "Version" ordering = ("document", "date")
class OrdreVirement(ModeleGestionMixin, TimeStampedModel): class Statut(models.TextChoices): EMIS = "E", "Émis" TRANSMIS = "T", "Transmis à la banque" statut = models.CharField(verbose_name="Statut", max_length=1, choices=Statut.choices, default=Statut.EMIS) reglements = models.ManyToManyField(to="Reglement", related_name="ordre", related_query_name="ordres", blank=False) # on utilise default plutôt que auto_created parce qu'on veut pouvoir mettre une date dans le futur date = models.DateField(verbose_name="Date d'exécution de l'ordre", default=timezone.now) fichier = models.FileField( verbose_name="Fichier SEPA de l'ordre de virement", upload_to=dynamic_filenames.FilePattern( filename_pattern="gestion/ordres/{uuid:.2base32}/{uuid}{ext}"), ) search_config = (("numero", "B"), )
class Migration(migrations.Migration): dependencies = [ ('base', '0004_merge_20170226_0844'), ] operations = [ migrations.RemoveField( model_name='bannerimage', name='original_image', ), migrations.RemoveField( model_name='bannerimage', name='scaled_image', ), migrations.AddField( model_name='bannerimage', name='image', field=stdimage.models.StdImageField( default='', upload_to=dynamic_filenames.FilePattern( filename_pattern="{model_name}/{instance.title:slug}{ext}" ), validators=[stdimage.validators.MinSizeValidator(1200, 300)]), preserve_default=False, ), ]
class Migration(migrations.Migration): dependencies = [("events", "0068_auto_20190205_1807")] operations = [ migrations.AddField( model_name="eventsubtype", name="default_description", field=agir.lib.models.DescriptionField( blank=True, help_text= "La description par défaut pour les événements de ce sous-type.", verbose_name="description par défaut", ), ), migrations.AddField( model_name="eventsubtype", name="default_image", field=stdimage.models.StdImageField( blank=True, help_text= "L'image associée par défaut à un événement de ce sous-type.", upload_to=dynamic_filenames.FilePattern( filename_pattern= "{app_label}/{model_name}/{instance.id}/banner{ext}"), verbose_name="image par défaut", ), ), ]
class Migration(migrations.Migration): dependencies = [ ("groups", "0005_supportgroupexternallink"), ] operations = [ migrations.AlterField( model_name="supportgroup", name="image", field=stdimage.models.StdImageField( blank=True, help_text= "Vous pouvez ajouter une image de bannière : elle apparaîtra sur la page, et sur les réseaux sociaux en cas de partage. Préférez une image à peu près deux fois plus large que haute. Elle doit faire au minimum 1200 pixels de large et 630 de haut pour une qualité optimale.", upload_to=dynamic_filenames.FilePattern( filename_pattern= "{app_label}/{model_name}/{instance.id}/banner/{uuid:base32}{ext}" ), validators=[ django.core.validators.FileExtensionValidator( allowed_extensions=[ "jpg", "jpeg", "gif", "png", "svg" ]) ], verbose_name="image", ), ), ]
class Migration(migrations.Migration): dependencies = [ ('talks', '0001_initial'), ] operations = [ migrations.AlterField( model_name='talk', name='audio_cleaned', field=models.FileField( blank=True, null=True, upload_to=dynamic_filenames.FilePattern( filename_pattern= 'audio/cleaned/tmi-archive-{uuid:.12base32}.mp3'), validators=[ django.core.validators.FileExtensionValidator(['mp3']) ]), ), migrations.AlterField( model_name='talk', name='audio_original', field=models.FileField( blank=True, null=True, upload_to=dynamic_filenames.FilePattern( filename_pattern= 'audio/original/tmi-archive-{uuid:.12base32}.mp3'), validators=[ django.core.validators.FileExtensionValidator(['mp3']) ]), ), migrations.AlterField( model_name='talk', name='description', field=tinymce.models.HTMLField(null=True), ), ]
class Migration(migrations.Migration): initial = True dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.CreateModel( name='UserProfile', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('password', models.CharField(max_length=128, verbose_name='password')), ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), ('email', models.EmailField(max_length=100, unique=True, verbose_name='email')), ('username', models.CharField(max_length=20)), ('first_name', models.CharField(max_length=20)), ('last_name', models.CharField(max_length=20)), ('avatar', stdimage.models.StdImageField( blank=True, null=True, upload_to=dynamic_filenames.FilePattern( filename_pattern='user_profiles/{uuid:base32}{ext}')) ), ('last_activity', models.DateTimeField()), ('user', models.OneToOneField( null=True, on_delete=django.db.models.deletion.CASCADE, related_name='profiles', to=settings.AUTH_USER_MODEL)), ], options={ 'abstract': False, }, ), ]
class Migration(migrations.Migration): dependencies = [ ("people", "0023_auto_20171129_1824"), ("events", "0026_add_report_fields"), ] operations = [ migrations.CreateModel( name="EventImage", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "image", stdimage.models.StdImageField( upload_to=dynamic_filenames.FilePattern( filename_pattern= "events/event/{instance.event_id}/{uuid:s}{ext}"), verbose_name="Fichier", ), ), ("legend", models.CharField(max_length=280, verbose_name="légende")), ( "author", models.ForeignKey( on_delete=django.db.models.deletion.PROTECT, related_name="event_images", to="people.Person", ), ), ( "event", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="images", to="events.Event", ), ), ], ) ]
class Migration(migrations.Migration): dependencies = [("base", "0005_auto_20170228_2210")] operations = [ migrations.AlterField( model_name="bannerimage", name="image", field=stdimage.models.StdImageField( upload_to=dynamic_filenames.FilePattern( filename_pattern="{model_name}/{instance.title:slug}{ext}" ), validators=[stdimage.validators.MinSizeValidator(2400, 600)], ), ) ]
class Migration(migrations.Migration): dependencies = [("base", "0002_auto_20170214_1911")] operations = [ migrations.CreateModel( name="BannerImage", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("url", models.URLField()), ("title", models.CharField(max_length=255)), ("displayed", models.BooleanField(default=True)), ( "original_image", models.URLField(blank=True, max_length=255, null=True), ), ( "scaled_image", stdimage.models.StdImageField( blank=True, null=True, upload_to=dynamic_filenames.FilePattern( filename_pattern= "{model_name}/{instance.title:slug}{ext}"), validators=[ stdimage.validators.MinSizeValidator(1200, 300) ], ), ), ("caption", models.TextField()), ( "date", models.DateTimeField(default=django.utils.timezone.now), ), ], ), migrations.DeleteModel(name="BannerImages"), ]
class Migration(migrations.Migration): dependencies = [ ("data_france", "0020_elumunicipal_parrainage2017"), ("elus", "0019_auto_20210316_1400"), ] operations = [ migrations.AlterField( model_name="rechercheparrainagemaire", name="elu", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="recherches_parrainages", related_query_name="rechercher_parrainage", to="data_france.elumunicipal", ), ), migrations.AlterField( model_name="rechercheparrainagemaire", name="formulaire", field=models.FileField( null=True, upload_to=dynamic_filenames.FilePattern( filename_pattern="elus/parrainages/{uuid:.30base32}{ext}"), verbose_name="Formulaire de promesse signé", ), ), migrations.AlterField( model_name="rechercheparrainagemaire", name="statut", field=models.IntegerField( choices=[ (1, "En cours"), (5, "Recherche annulée"), (2, "S'engage à parrainer"), (4, "Refuse de parrainer"), (6, "Pas encore décidé"), (7, "S'est engagé envers un autre candidat"), (3, "Promesse reçue et validée"), ], default=1, ), ), ]
class Migration(migrations.Migration): dependencies = [("base", "0001_initial")] operations = [ migrations.AlterField( model_name="bannerimages", name="scaled_image", field=stdimage.models.StdImageField( blank=True, null=True, upload_to=dynamic_filenames.FilePattern( filename_pattern="{model_name}/{instance.title:slug}{ext}" ), validators=[stdimage.validators.MinSizeValidator(800, 600)], ), ) ]
class Migration(migrations.Migration): dependencies = [("groups", "0015_auto_20171205_1849")] operations = [ migrations.AlterField( model_name="supportgroup", name="image", field=stdimage.models.StdImageField( blank=True, help_text="Vous pouvez ajouter une image de bannière : elle apparaîtra sur la page, et sur les réseaux sociaux en cas de partage. Préférez une image à peu près deux fois plus large que haute. Elle doit faire au minimum 1200 pixels de large et 630 de haut pour une qualité optimale.", upload_to=dynamic_filenames.FilePattern( filename_pattern="{app_label}/{model_name}/{instance.id}/banner{ext}" ), verbose_name="image", ), ) ]
class Migration(migrations.Migration): dependencies = [("events", "0019_harmonize_image_fields")] operations = [ migrations.AlterField( model_name="event", name="image", field=stdimage.models.StdImageField( blank=True, help_text="L'image à utiliser pour l'affichage sur la page, comme miniature dans les listes, et pour le partage sur les réseaux sociaux. Elle doit faire au minimum 1200 pixels de large, et 630 de haut. Préférer un rapport largeur/hauteur de 2 (deux fois plus large que haut)?", upload_to=dynamic_filenames.FilePattern( filename_pattern="{app_label}/{model_name}/{instance.id}/banner{ext}" ), verbose_name="image", ), ) ]
class Migration(migrations.Migration): dependencies = [("groups", "0019_merge_20171221_1605")] operations = [ migrations.AddField( model_name="supportgroupsubtype", name="icon_anchor_x", field=models.PositiveSmallIntegerField( null=True, verbose_name="ancre de l'icône (x)"), ), migrations.AddField( model_name="supportgroupsubtype", name="icon_anchor_y", field=models.PositiveSmallIntegerField( null=True, verbose_name="ancre de l'icône (y)"), ), migrations.AddField( model_name="supportgroupsubtype", name="popup_anchor_x", field=models.PositiveSmallIntegerField( null=True, verbose_name="ancre de la popup (x)"), ), migrations.AddField( model_name="supportgroupsubtype", name="popup_anchor_y", field=models.PositiveSmallIntegerField( null=True, verbose_name="ancre de la popup (y)"), ), migrations.AlterField( model_name="supportgroupsubtype", name="icon", field=models.ImageField( blank=True, help_text="L'icône associée aux marqueurs sur la carte.", upload_to=dynamic_filenames.FilePattern( filename_pattern= "{app_label}/{model_name}/{instance.id}/icon{ext}"), verbose_name="icon", ), ), ]
class Migration(migrations.Migration): dependencies = [ ("activity", "0003_announcements"), ] operations = [ migrations.AlterField( model_name="announcement", name="image", field=stdimage.models.StdImageField( blank=True, null=True, upload_to=dynamic_filenames.FilePattern( filename_pattern="activity/announcements/{uuid:.2base32}/{uuid:s}{ext}" ), validators=[stdimage.validators.MinSizeValidator(255, 160)], verbose_name="Bannière", ), ), ]
class Migration(migrations.Migration): dependencies = [ ("people", "0006_add_newsletter_liaison_type"), ] operations = [ migrations.AlterField( model_name="person", name="image", field=stdimage.models.StdImageField( blank=True, help_text="Vous pouvez ajouter une image publique de profil", upload_to=dynamic_filenames.FilePattern( filename_pattern= "{app_label}/{model_name}/{instance.id}/{uuid:s}{ext}"), validators=[ django.core.validators.FileExtensionValidator( allowed_extensions=["jpg", "jpeg", "gif", "png"]) ], verbose_name="image de profil", ), ), ]
class Migration(migrations.Migration): dependencies = [("groups", "0009_rename_index")] operations = [ migrations.AddField( model_name="supportgroup", name="allow_html", field=models.BooleanField( default=False, verbose_name="autoriser le HTML dans la description"), ), migrations.AddField( model_name="supportgroup", name="image", field=stdimage.models.StdImageField( blank=True, help_text= "L'image à utiliser pour l'affichage sur la page, comme miniature dans les listes, et pour le partage sur les réseaux sociaux. Elle doit faire au minimum 1200 pixels de large, et 630 de haut. Préférer un rapport largeur/hauteur de 2 (deux fois plus large que haut)?", upload_to=dynamic_filenames.FilePattern( filename_pattern= "{app_label}/{model_name}/{instance.id}/banner{ext}"), verbose_name="image", ), ), migrations.AddField( model_name="supportgroup", name="type", field=models.CharField( choices=[("L", "Groupe local"), ("B", "Livret thématique")], default="L", max_length=1, verbose_name="type de groupe", ), ), ]
class Migration(migrations.Migration): dependencies = [ migrations.swappable_dependency(settings.NUNTIUS_SEGMENT_MODEL), ("activity", "0002_auto_20201104_1128"), ] operations = [ migrations.CreateModel( name="Announcement", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "title", models.CharField( help_text= "Ce texte sera utilisé comme titre et texte du lien de l'annonce", max_length=200, verbose_name="Titre de l'annonce", ), ), ("link", models.URLField(verbose_name="Lien")), ("content", agir.lib.models.DescriptionField(verbose_name="Contenu")), ( "image", stdimage.models.StdImageField( blank=True, null=True, upload_to=dynamic_filenames.FilePattern( filename_pattern= "activity/announcements/{uuid:2base32}/{uuid:s}{ext}" ), validators=[ stdimage.validators.MinSizeValidator(255, 160) ], verbose_name="Bannière", ), ), ( "start_date", models.DateTimeField(default=django.utils.timezone.now, verbose_name="Date de début"), ), ( "end_date", models.DateTimeField(blank=True, null=True, verbose_name="Date de fin"), ), ( "priority", models.IntegerField( default=0, help_text= "Permet de modifier l'ordre d'affichage des annonces. Les valeurs plus élevées sont affichées avant. Deux annonces de même priorité sont affichées dans l'ordre anti-chronologique (par date de début)", verbose_name="Priorité", ), ), ( "segment", models.ForeignKey( blank=True, help_text= "Segment des personnes auquel ce message sera montré (laisser vide pour montrer à tout le monde)", null=True, on_delete=django.db.models.deletion.CASCADE, related_name="notifications", related_query_name="notification", to=settings.NUNTIUS_SEGMENT_MODEL, ), ), ], options={ "verbose_name": "Annonce", "ordering": ("start_date", "end_date"), }, ), migrations.AddIndex( model_name="announcement", index=models.Index(fields=["start_date", "end_date"], name="announcement_date_index"), ), ]
class Migration(migrations.Migration): initial = True dependencies = [ ("people", "0001_creer_modeles"), ] operations = [ migrations.CreateModel( name="Membership", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "created", models.DateTimeField( default=django.utils.timezone.now, editable=False, verbose_name="date de création", ), ), ( "modified", models.DateTimeField(auto_now=True, verbose_name="dernière modification"), ), ( "membership_type", models.IntegerField( choices=[ (10, "Membre du groupe"), (50, "Membre gestionnaire"), (100, "Animateur⋅rice"), ], default=10, verbose_name="Statut dans le groupe", ), ), ( "notifications_enabled", models.BooleanField( default=True, help_text= "Je recevrai des messages en cas de modification du groupe.", verbose_name="Recevoir les notifications de ce groupe", ), ), ], options={ "verbose_name": "adhésion", "verbose_name_plural": "adhésions", }, ), migrations.CreateModel( name="SupportGroup", fields=[ ( "created", models.DateTimeField( default=django.utils.timezone.now, editable=False, verbose_name="date de création", ), ), ( "modified", models.DateTimeField(auto_now=True, verbose_name="dernière modification"), ), ( "id", models.UUIDField( default=uuid.uuid4, editable=False, help_text= "UUID interne à l'API pour identifier la ressource", primary_key=True, serialize=False, verbose_name="UUID", ), ), ( "coordinates", django.contrib.gis.db.models.fields.PointField( blank=True, geography=True, null=True, srid=4326, verbose_name="coordonnées", ), ), ( "coordinates_type", models.PositiveSmallIntegerField( choices=[ (0, "Coordonnées manuelles"), (10, "Coordonnées automatiques précises"), ( 20, "Coordonnées automatiques approximatives (niveau rue)", ), ( 25, "Coordonnées automatique approximatives (arrondissement)", ), (30, "Coordonnées automatiques approximatives (ville)" ), (50, "Coordonnées automatiques (qualité inconnue)"), (254, "Pas de position géographique"), (255, "Coordonnées introuvables"), ], editable=False, help_text= "Comment les coordonnées ci-dessus ont-elle été acquises", null=True, verbose_name="type de coordonnées", ), ), ( "location_name", models.CharField(blank=True, max_length=255, verbose_name="nom du lieu"), ), ( "location_address1", models.CharField(blank=True, max_length=100, verbose_name="adresse (1ère ligne)"), ), ( "location_address2", models.CharField(blank=True, max_length=100, verbose_name="adresse (2ème ligne)"), ), ( "location_citycode", models.CharField(blank=True, max_length=20, verbose_name="code INSEE"), ), ( "location_city", models.CharField(blank=True, max_length=100, verbose_name="ville"), ), ( "location_zip", models.CharField(blank=True, max_length=20, verbose_name="code postal"), ), ( "location_state", models.CharField(blank=True, max_length=40, verbose_name="état"), ), ( "location_country", django_countries.fields.CountryField(blank=True, default="FR", max_length=2, verbose_name="pays"), ), ( "contact_name", models.CharField(blank=True, max_length=255, verbose_name="nom du contact"), ), ( "contact_email", models.EmailField( blank=True, max_length=254, verbose_name="adresse email du contact", ), ), ( "contact_phone", models.CharField( blank=True, max_length=30, verbose_name="numéro de téléphone du contact", ), ), ( "contact_hide_phone", models.BooleanField( default=False, verbose_name="Cacher mon numéro de téléphone"), ), ( "image", stdimage.models.StdImageField( blank=True, help_text= "Vous pouvez ajouter une image de bannière : elle apparaîtra sur la page, et sur les réseaux sociaux en cas de partage. Préférez une image à peu près deux fois plus large que haute. Elle doit faire au minimum 1200 pixels de large et 630 de haut pour une qualité optimale.", upload_to=dynamic_filenames.FilePattern( filename_pattern= "{app_label}/{model_name}/{instance.id}/banner{ext}" ), validators=[ django.core.validators.FileExtensionValidator( allowed_extensions=[ "jpg", "jpeg", "gif", "png", "svg" ]) ], verbose_name="image", ), ), ( "description", agir.lib.models.DescriptionField( blank=True, help_text="Une courte description", verbose_name="description", ), ), ( "allow_html", models.BooleanField( default=False, verbose_name= "autoriser le HTML étendu dans la description", ), ), ( "name", models.CharField(help_text="Le nom du groupe", max_length=255, verbose_name="nom"), ), ( "type", models.CharField( choices=[ ("L", "Groupe local"), ("B", "Groupe thématique"), ("F", "Groupe fonctionnel"), ("P", "Groupe professionel"), ("2", "Équipe de soutien « Nous Sommes Pour ! »"), ], default="L", max_length=1, verbose_name="type de groupe", ), ), ( "published", models.BooleanField( default=True, help_text= "Le groupe doit-il être visible publiquement.", verbose_name="publié", ), ), ], options={ "verbose_name": "groupe d'action", "verbose_name_plural": "groupes d'action", "ordering": ("-created", ), "permissions": (( "view_hidden_supportgroup", "Peut afficher les groupes non publiés", ), ), }, ), migrations.CreateModel( name="SupportGroupSubtype", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "created", models.DateTimeField( default=django.utils.timezone.now, editable=False, verbose_name="date de création", ), ), ( "modified", models.DateTimeField(auto_now=True, verbose_name="dernière modification"), ), ( "label", models.CharField(max_length=50, unique=True, verbose_name="nom"), ), ( "description", models.TextField(blank=True, verbose_name="description"), ), ( "visibility", models.CharField( choices=[ ("N", "Personne (plus utilisé)"), ("D", "Seulement depuis l'administration"), ("A", "N'importe qui"), ], default="D", max_length=1, verbose_name="Qui peut créer avec ce sous-type ?", ), ), ( "hide_text_label", models.BooleanField(default=False, verbose_name="cacher le label texte"), ), ( "icon", models.ImageField( blank=True, help_text= "L'icône associée aux marqueurs sur la carte.", upload_to=dynamic_filenames.FilePattern( filename_pattern= "{app_label}/{model_name}/{instance.id}/icon{ext}" ), verbose_name="icon", ), ), ( "icon_name", models.CharField( blank=True, max_length=200, verbose_name="Nom de l'icône Font Awesome", ), ), ( "color", models.CharField( blank=True, help_text= "La couleur associée aux marqueurs sur la carte.", max_length=7, validators=[ django.core.validators.RegexValidator( regex="^#[0-9A-Fa-f]{6}$") ], verbose_name="couleur", ), ), ( "icon_anchor_x", models.PositiveSmallIntegerField( blank=True, null=True, verbose_name="ancre de l'icône (x)"), ), ( "icon_anchor_y", models.PositiveSmallIntegerField( blank=True, null=True, verbose_name="ancre de l'icône (y)"), ), ( "popup_anchor_y", models.PositiveSmallIntegerField( blank=True, null=True, verbose_name= "placement de la popup (par rapport au point)", ), ), ( "config", models.JSONField(blank=True, default=dict, verbose_name="Configuration"), ), ( "allow_external", models.BooleanField( default=False, verbose_name="Les non-insoumis⋅es peuvent rejoindre", ), ), ( "external_help_text", models.TextField( blank=True, verbose_name= "Phrase d'explication pour rejoindre le groupe ou l'événement", ), ), ( "type", models.CharField( choices=[ ("L", "Groupe local"), ("B", "Groupe thématique"), ("F", "Groupe fonctionnel"), ("P", "Groupe professionel"), ("2", "Équipe de soutien « Nous Sommes Pour ! »"), ], max_length=1, verbose_name="type de groupe", ), ), ], options={ "verbose_name": "sous-type", }, ), migrations.CreateModel( name="SupportGroupTag", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "label", models.CharField(max_length=50, unique=True, verbose_name="nom"), ), ( "description", models.TextField(blank=True, verbose_name="description"), ), ], options={ "verbose_name": "tag", }, ), migrations.CreateModel( name="TransferOperation", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "timestamp", models.DateTimeField(auto_now_add=True, verbose_name="Heure de l'opération"), ), ( "former_group", models.ForeignKey( editable=False, on_delete=django.db.models.deletion.CASCADE, related_name="+", to="groups.supportgroup", ), ), ], options={ "verbose_name": "Transfert de membres", "verbose_name_plural": "Transferts de membres", "ordering": ("timestamp", "former_group"), }, ), # Relations et index migrations.AddField( model_name="transferoperation", name="manager", field=models.ForeignKey( null=True, on_delete=django.db.models.deletion.SET_NULL, to="people.person", ), ), migrations.AddField( model_name="transferoperation", name="members", field=models.ManyToManyField( editable=False, related_name="_transferoperation_members_+", to="people.Person", ), ), migrations.AddField( model_name="transferoperation", name="new_group", field=models.ForeignKey( editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="+", to="groups.supportgroup", ), ), migrations.AddField( model_name="supportgroup", name="members", field=models.ManyToManyField( blank=True, related_name="supportgroups", through="groups.Membership", to="people.Person", ), ), migrations.AddField( model_name="supportgroup", name="subtypes", field=models.ManyToManyField( blank=True, related_name="supportgroups", to="groups.SupportGroupSubtype", ), ), migrations.AddField( model_name="supportgroup", name="tags", field=models.ManyToManyField(blank=True, related_name="groups", to="groups.SupportGroupTag"), ), migrations.AddField( model_name="membership", name="person", field=models.ForeignKey( editable=False, on_delete=django.db.models.deletion.CASCADE, related_name="memberships", to="people.person", ), ), migrations.AddField( model_name="membership", name="supportgroup", field=models.ForeignKey( editable=False, on_delete=django.db.models.deletion.CASCADE, related_name="memberships", to="groups.supportgroup", ), ), migrations.CreateModel( name="ThematicGroup", fields=[], options={ "verbose_name": "Groupe thématique", "verbose_name_plural": "Groupes thématiques", "proxy": True, "default_permissions": ("view", "change"), "indexes": [], "constraints": [], }, bases=("groups.supportgroup", ), ), migrations.AlterUniqueTogether( name="membership", unique_together={("supportgroup", "person")}, ), ]
class Migration(migrations.Migration): initial = True dependencies = [] operations = [ migrations.CreateModel( name="StaticMapImage", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "center", django.contrib.gis.db.models.fields.PointField( geography=True, srid=4326, verbose_name="coordonnées"), ), ( "zoom", models.IntegerField( default=11, validators=[ django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(20), ], verbose_name="niveau de zoom", ), ), ( "scale", models.IntegerField( default=1, validators=[ django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(2), ], verbose_name="résolution de l'image", ), ), ( "image", stdimage.models.StdImageField( upload_to=dynamic_filenames.FilePattern( filename_pattern= "{app_label}/{model_name}/{uuid:base32}{ext}"), validators=[ django.core.validators.FileExtensionValidator( allowed_extensions=["jpg", "png"]) ], verbose_name="image", ), ), ], ), migrations.AddIndex( model_name="staticmapimage", index=models.Index(fields=["center"], name="carte_stati_center_586687_idx"), ), migrations.AddConstraint( model_name="staticmapimage", constraint=models.UniqueConstraint( fields=("center", "zoom", "scale"), name="unique_for_position_options"), ), ]
class Migration(migrations.Migration): initial = True dependencies = [ ("people", "0001_creer_modeles"), ("groups", "0001_creer_modeles"), ("payments", "0001_creer_modeles"), ] operations = [ migrations.CreateModel( name="Calendar", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("name", models.CharField(max_length=255, verbose_name="titre")), ("slug", models.SlugField(unique=True, verbose_name="slug")), ( "archived", models.BooleanField( default=False, verbose_name="Calendrier archivé" ), ), ( "user_contributed", models.BooleanField( default=False, verbose_name="Les utilisateurs peuvent ajouter des événements", ), ), ( "description", models.TextField( blank=True, help_text="Saisissez une description (HTML accepté)", verbose_name="description", ), ), ( "image", stdimage.models.StdImageField( blank=True, upload_to=dynamic_filenames.FilePattern( filename_pattern="{app_label}/{model_name}/{instance.name:slug}{ext}" ), verbose_name="bannière", ), ), ], options={"verbose_name": "Agenda",}, ), migrations.CreateModel( name="CalendarItem", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "created", models.DateTimeField( default=django.utils.timezone.now, editable=False, verbose_name="date de création", ), ), ( "modified", models.DateTimeField( auto_now=True, verbose_name="dernière modification" ), ), ], options={"verbose_name": "Élément de calendrier",}, ), migrations.CreateModel( name="Event", fields=[ ( "created", models.DateTimeField( default=django.utils.timezone.now, editable=False, verbose_name="date de création", ), ), ( "modified", models.DateTimeField( auto_now=True, verbose_name="dernière modification" ), ), ( "id", models.UUIDField( default=uuid.uuid4, editable=False, help_text="UUID interne à l'API pour identifier la ressource", primary_key=True, serialize=False, verbose_name="UUID", ), ), ( "coordinates", django.contrib.gis.db.models.fields.PointField( blank=True, geography=True, null=True, srid=4326, verbose_name="coordonnées", ), ), ( "coordinates_type", models.PositiveSmallIntegerField( choices=[ (0, "Coordonnées manuelles"), (10, "Coordonnées automatiques précises"), ( 20, "Coordonnées automatiques approximatives (niveau rue)", ), ( 25, "Coordonnées automatique approximatives (arrondissement)", ), (30, "Coordonnées automatiques approximatives (ville)"), (50, "Coordonnées automatiques (qualité inconnue)"), (254, "Pas de position géographique"), (255, "Coordonnées introuvables"), ], editable=False, help_text="Comment les coordonnées ci-dessus ont-elle été acquises", null=True, verbose_name="type de coordonnées", ), ), ( "location_name", models.CharField( blank=True, max_length=255, verbose_name="nom du lieu" ), ), ( "location_address1", models.CharField( blank=True, max_length=100, verbose_name="adresse (1ère ligne)" ), ), ( "location_address2", models.CharField( blank=True, max_length=100, verbose_name="adresse (2ème ligne)" ), ), ( "location_citycode", models.CharField( blank=True, max_length=20, verbose_name="code INSEE" ), ), ( "location_city", models.CharField(blank=True, max_length=100, verbose_name="ville"), ), ( "location_zip", models.CharField( blank=True, max_length=20, verbose_name="code postal" ), ), ( "location_state", models.CharField(blank=True, max_length=40, verbose_name="état"), ), ( "location_country", django_countries.fields.CountryField( blank=True, default="FR", max_length=2, verbose_name="pays" ), ), ( "contact_name", models.CharField( blank=True, max_length=255, verbose_name="nom du contact" ), ), ( "contact_email", models.EmailField( blank=True, max_length=254, verbose_name="adresse email du contact", ), ), ( "contact_phone", models.CharField( blank=True, max_length=30, verbose_name="numéro de téléphone du contact", ), ), ( "contact_hide_phone", models.BooleanField( default=False, verbose_name="Cacher mon numéro de téléphone" ), ), ( "image", stdimage.models.StdImageField( blank=True, help_text="Vous pouvez ajouter une image de bannière : elle apparaîtra sur la page, et sur les réseaux sociaux en cas de partage. Préférez une image à peu près deux fois plus large que haute. Elle doit faire au minimum 1200 pixels de large et 630 de haut pour une qualité optimale.", upload_to=dynamic_filenames.FilePattern( filename_pattern="{app_label}/{model_name}/{instance.id}/banner{ext}" ), validators=[ django.core.validators.FileExtensionValidator( allowed_extensions=["jpg", "jpeg", "gif", "png", "svg"] ) ], verbose_name="image", ), ), ( "description", agir.lib.models.DescriptionField( blank=True, help_text="Une courte description", verbose_name="description", ), ), ( "allow_html", models.BooleanField( default=False, verbose_name="autoriser le HTML étendu dans la description", ), ), ( "name", models.CharField( help_text="Le nom de l'événement", max_length=255, verbose_name="nom", ), ), ( "visibility", models.CharField( choices=[ ("A", "Caché"), ("O", "Visible par les organisateurs"), ("P", "Public"), ], default="P", max_length=1, verbose_name="Visibilité", ), ), ( "start_time", agir.events.models.CustomDateTimeField( verbose_name="date et heure de début" ), ), ( "end_time", agir.events.models.CustomDateTimeField( verbose_name="date et heure de fin" ), ), ( "max_participants", models.IntegerField( blank=True, null=True, verbose_name="Nombre maximum de participants", ), ), ( "allow_guests", models.BooleanField( default=False, verbose_name="Autoriser les participant⋅e⋅s à inscrire des invité⋅e⋅s", ), ), ( "facebook", agir.lib.model_fields.FacebookEventField( blank=True, max_length=20, verbose_name="Événement correspondant sur Facebook", ), ), ( "report_image", stdimage.models.StdImageField( blank=True, help_text="Cette image apparaîtra en tête de votre compte-rendu, et dans les partages que vous ferez du compte-rendu sur les réseaux sociaux.", upload_to=dynamic_filenames.FilePattern( filename_pattern="{app_label}/{model_name}/{instance.id}/report_banner{ext}" ), verbose_name="image de couverture", ), ), ( "report_content", agir.lib.models.DescriptionField( blank=True, help_text="Ajoutez un compte-rendu de votre événement. N'hésitez pas à inclure des photos.", verbose_name="compte-rendu de l'événement", ), ), ( "report_summary_sent", models.BooleanField( default=False, verbose_name="Le mail de compte-rendu a été envoyé", ), ), ( "payment_parameters", models.JSONField( blank=True, null=True, verbose_name="Paramètres de paiement" ), ), ( "scanner_event", models.IntegerField( blank=True, null=True, verbose_name="L'ID de l'événement sur le logiciel de tickets", ), ), ( "scanner_category", models.IntegerField( blank=True, null=True, verbose_name="La catégorie que doivent avoir les tickets sur scanner", ), ), ( "enable_jitsi", models.BooleanField( default=False, verbose_name="Activer la visio-conférence" ), ), ( "participation_template", models.TextField( blank=True, null=True, verbose_name="Template pour la page de participation", ), ), ( "do_not_list", models.BooleanField( default=False, help_text="L'événement n'apparaîtra pas sur la carte, ni sur le calendrier et ne sera pas cherchable via la recherche interne ou les moteurs de recherche.", verbose_name="Ne pas lister l'événement", ), ), ( "legal", models.JSONField( blank=True, default=dict, encoder=agir.lib.form_fields.CustomJSONEncoder, verbose_name="Informations juridiques", ), ), ( "for_users", models.CharField( choices=[ ("I", "Les insoumis⋅es"), ("2", "Les signataires « Nous Sommes Pour ! »"), ], default="I", max_length=1, verbose_name="Utilisateur⋅ices de la plateforme concerné⋅es par l'événement", ), ), ], options={ "verbose_name": "événement", "verbose_name_plural": "événements", "ordering": ("-start_time", "-end_time"), "permissions": ( ("every_event", "Peut éditer tous les événements"), ("view_hidden_event", "Peut voir les événements non publiés"), ), }, ), migrations.CreateModel( name="EventImage", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "created", models.DateTimeField( default=django.utils.timezone.now, editable=False, verbose_name="date de création", ), ), ( "modified", models.DateTimeField( auto_now=True, verbose_name="dernière modification" ), ), ( "image", stdimage.models.StdImageField( upload_to=dynamic_filenames.FilePattern( filename_pattern="events/event/{instance.event_id}/{uuid:s}{ext}" ), verbose_name="Fichier", ), ), ("legend", models.CharField(max_length=280, verbose_name="légende")), ], options={"abstract": False,}, ), migrations.CreateModel( name="EventSubtype", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "created", models.DateTimeField( default=django.utils.timezone.now, editable=False, verbose_name="date de création", ), ), ( "modified", models.DateTimeField( auto_now=True, verbose_name="dernière modification" ), ), ( "label", models.CharField(max_length=50, unique=True, verbose_name="nom"), ), ( "description", models.TextField(blank=True, verbose_name="description"), ), ( "visibility", models.CharField( choices=[ ("N", "Personne (plus utilisé)"), ("D", "Seulement depuis l'administration"), ("A", "N'importe qui"), ], default="D", max_length=1, verbose_name="Qui peut créer avec ce sous-type ?", ), ), ( "hide_text_label", models.BooleanField( default=False, verbose_name="cacher le label texte" ), ), ( "icon", models.ImageField( blank=True, help_text="L'icône associée aux marqueurs sur la carte.", upload_to=dynamic_filenames.FilePattern( filename_pattern="{app_label}/{model_name}/{instance.id}/icon{ext}" ), verbose_name="icon", ), ), ( "icon_name", models.CharField( blank=True, max_length=200, verbose_name="Nom de l'icône Font Awesome", ), ), ( "color", models.CharField( blank=True, help_text="La couleur associée aux marqueurs sur la carte.", max_length=7, validators=[ django.core.validators.RegexValidator( regex="^#[0-9A-Fa-f]{6}$" ) ], verbose_name="couleur", ), ), ( "icon_anchor_x", models.PositiveSmallIntegerField( blank=True, null=True, verbose_name="ancre de l'icône (x)" ), ), ( "icon_anchor_y", models.PositiveSmallIntegerField( blank=True, null=True, verbose_name="ancre de l'icône (y)" ), ), ( "popup_anchor_y", models.PositiveSmallIntegerField( blank=True, null=True, verbose_name="placement de la popup (par rapport au point)", ), ), ( "config", models.JSONField( blank=True, default=dict, verbose_name="Configuration" ), ), ( "allow_external", models.BooleanField( default=False, verbose_name="Les non-insoumis⋅es peuvent rejoindre", ), ), ( "external_help_text", models.TextField( blank=True, verbose_name="Phrase d'explication pour rejoindre le groupe ou l'événement", ), ), ( "type", models.CharField( choices=[ ("G", "Réunion de groupe"), ("M", "Événement public"), ("A", "Action publique"), ("O", "Autre"), ], max_length=1, verbose_name="Type d'événement", ), ), ( "default_description", agir.lib.models.DescriptionField( blank=True, help_text="La description par défaut pour les événements de ce sous-type.", verbose_name="description par défaut", ), ), ( "default_image", stdimage.models.StdImageField( blank=True, help_text="L'image associée par défaut à un événement de ce sous-type.", upload_to=dynamic_filenames.FilePattern( filename_pattern="{app_label}/{model_name}/{instance.id}/banner{ext}" ), verbose_name="image par défaut", ), ), ], options={ "verbose_name": "Sous-type d'événement", "verbose_name_plural": "Sous-types d'événement", }, ), migrations.CreateModel( name="EventTag", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "label", models.CharField(max_length=50, unique=True, verbose_name="nom"), ), ( "description", models.TextField(blank=True, verbose_name="description"), ), ], options={"verbose_name": "tag",}, ), migrations.CreateModel( name="IdentifiedGuest", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "status", models.CharField( choices=[ ("AP", "En attente du paiement"), ("CO", "Inscription confirmée"), ("CA", "Inscription annulée"), ], default="CO", max_length=2, verbose_name="Statut", ), ), ], options={"db_table": "events_rsvp_guests_form_submissions",}, ), migrations.CreateModel( name="JitsiMeeting", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "domain", models.CharField( default=agir.events.models.jitsi_default_domain, max_length=255 ), ), ( "room_name", models.CharField( default=agir.events.models.jitsi_default_room_name, max_length=255, unique=True, validators=[ django.core.validators.RegexValidator( re.compile("^[a-z0-9-_]+$"), "Seulement des lettres minuscules, des chiffres, des _ et des -.", "invalid", ) ], ), ), ( "start_time", models.DateTimeField( blank=True, null=True, verbose_name="Début effectif" ), ), ( "end_time", models.DateTimeField( blank=True, null=True, verbose_name="Fin effective" ), ), ], options={"verbose_name": "Visio-conférence",}, ), migrations.CreateModel( name="OrganizerConfig", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "is_creator", models.BooleanField( default=False, verbose_name="Créateur de l'événement" ), ), ( "notifications_enabled", models.BooleanField( default=True, verbose_name="Recevoir les notifications" ), ), ], ), migrations.CreateModel( name="RSVP", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "created", models.DateTimeField( default=django.utils.timezone.now, editable=False, verbose_name="date de création", ), ), ( "modified", models.DateTimeField( auto_now=True, verbose_name="dernière modification" ), ), ( "guests", models.PositiveIntegerField( default=0, verbose_name="nombre d'invités supplémentaires" ), ), ( "status", models.CharField( choices=[ ("AP", "En attente du paiement"), ("CO", "Inscription confirmée"), ("CA", "Inscription annulée"), ], default="CO", max_length=2, verbose_name="Statut", ), ), ( "notifications_enabled", models.BooleanField( default=True, verbose_name="Recevoir les notifications" ), ), ( "event", models.ForeignKey( editable=False, on_delete=django.db.models.deletion.CASCADE, related_name="rsvps", to="events.event", ), ), ], options={"verbose_name": "RSVP", "verbose_name_plural": "RSVP",}, ), # relations et autres migrations.AddField( model_name="rsvp", name="form_submission", field=models.OneToOneField( editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="rsvp", to="people.personformsubmission", ), ), migrations.AddField( model_name="rsvp", name="guests_form_submissions", field=models.ManyToManyField( related_name="guest_rsvp", through="events.IdentifiedGuest", to="people.PersonFormSubmission", ), ), migrations.AddField( model_name="rsvp", name="jitsi_meeting", field=models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="rsvps", to="events.jitsimeeting", ), ), migrations.AddField( model_name="rsvp", name="payment", field=models.OneToOneField( editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="rsvp", to="payments.payment", ), ), migrations.AddField( model_name="rsvp", name="person", field=models.ForeignKey( editable=False, on_delete=django.db.models.deletion.CASCADE, related_name="rsvps", to="people.person", ), ), migrations.AddField( model_name="organizerconfig", name="as_group", field=models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name="organizer_configs", to="groups.supportgroup", ), ), migrations.AddField( model_name="organizerconfig", name="event", field=models.ForeignKey( editable=False, on_delete=django.db.models.deletion.CASCADE, related_name="organizer_configs", to="events.event", ), ), migrations.AddField( model_name="organizerconfig", name="person", field=models.ForeignKey( editable=False, on_delete=django.db.models.deletion.CASCADE, related_name="organizer_configs", to="people.person", ), ), migrations.AddField( model_name="jitsimeeting", name="event", field=models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name="jitsi_meetings", to="events.event", ), ), migrations.AddField( model_name="identifiedguest", name="payment", field=models.OneToOneField( editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="identified_guest", to="payments.payment", ), ), migrations.AddField( model_name="identifiedguest", name="rsvp", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="identified_guests", to="events.rsvp", ), ), migrations.AddField( model_name="identifiedguest", name="submission", field=models.OneToOneField( db_column="personformsubmission_id", null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="rsvp_guest", to="people.personformsubmission", ), ), migrations.AddField( model_name="eventimage", name="author", field=models.ForeignKey( editable=False, on_delete=django.db.models.deletion.CASCADE, related_name="event_images", to="people.person", ), ), migrations.AddField( model_name="eventimage", name="event", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="images", to="events.event", ), ), migrations.AddField( model_name="event", name="attendees", field=models.ManyToManyField( related_name="events", through="events.RSVP", to="people.Person" ), ), migrations.AddField( model_name="event", name="organizers", field=models.ManyToManyField( related_name="organized_events", through="events.OrganizerConfig", to="people.Person", ), ), migrations.AddField( model_name="event", name="organizers_groups", field=models.ManyToManyField( related_name="organized_events", through="events.OrganizerConfig", to="groups.SupportGroup", ), ), migrations.AddField( model_name="event", name="subscription_form", field=models.OneToOneField( blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to="people.personform", ), ), migrations.AddField( model_name="event", name="subtype", field=models.ForeignKey( default=agir.events.models.get_default_subtype, on_delete=django.db.models.deletion.PROTECT, related_name="events", to="events.eventsubtype", verbose_name="Sous-type", ), ), migrations.AddField( model_name="event", name="tags", field=models.ManyToManyField( blank=True, related_name="events", to="events.EventTag" ), ), migrations.AddField( model_name="calendaritem", name="calendar", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="items", to="events.calendar", ), ), migrations.AddField( model_name="calendaritem", name="event", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="calendar_items", to="events.event", ), ), migrations.AddField( model_name="calendar", name="events", field=models.ManyToManyField( related_name="calendars", through="events.CalendarItem", to="events.Event", ), ), migrations.AddField( model_name="calendar", name="parent", field=models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="children", related_query_name="child", to="events.calendar", ), ), migrations.AlterUniqueTogether( name="rsvp", unique_together={("event", "person")}, ), migrations.AlterUniqueTogether( name="identifiedguest", unique_together={("rsvp", "submission")}, ), migrations.AddIndex( model_name="event", index=models.Index( fields=["start_time", "end_time"], name="events_datetime_index" ), ), migrations.AddIndex( model_name="event", index=models.Index(fields=["end_time"], name="events_end_time_index"), ), ]
class Migration(migrations.Migration): dependencies = [ ('story', '0009_remove_story_slug'), ] operations = [ migrations.AddField( model_name='story', name='image', field=stdimage.models.StdImageField(default='images/default.jpg', upload_to=dynamic_filenames.FilePattern(filename_pattern='images/{app_label:.25}/{uuid:base32}{ext}')), preserve_default=False, ), ]
class Migration(migrations.Migration): dependencies = [("donations", "0004_auto_20181204_2135")] operations = [ migrations.AddField( model_name="spendingrequest", name="operation", field=models.ForeignKey( null=True, on_delete=django.db.models.deletion.PROTECT, related_name="spending_request", to="donations.Operation", ), ), migrations.AlterField( model_name="document", name="file", field=models.FileField( upload_to=dynamic_filenames.FilePattern( filename_pattern= "financement/request/{instance.request_id}/{uuid:s}{ext}"), validators=[ django.core.validators.FileExtensionValidator([ "doc", "docx", "odt", "xls", "xlsx", "ods", "pdf", "png", "jpeg", "jpg", "gif", ]) ], verbose_name="Fichier", ), ), migrations.AlterField( model_name="spendingrequest", name="amount", field=agir.payments.model_fields.AmountField( help_text= "Pour que cette demande soit payée, la somme allouée à votre groupe doit être suffisante.", verbose_name="Montant de la dépense", ), ), migrations.AlterField( model_name="spendingrequest", name="status", field=models.CharField( choices=[ ("D", "Brouillon à compléter"), ("G", "En attente de validation par un autre animateur"), ( "R", "En attente de vérification par l'équipe de suivi des questions financières", ), ("I", "Informations supplémentaires requises"), ("V", "Validée, en attente des fonds"), ("T", "Décomptée de l'allocation du groupe, à payer"), ("P", "Payée"), ("B", "Cette demande a été refusée"), ], default="D", max_length=1, verbose_name="Statut", ), ), ]
class Migration(migrations.Migration): initial = True dependencies = [] operations = [ migrations.CreateModel( name="Article", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("url", models.URLField()), ("title", models.CharField(max_length=255)), ( "original_image", models.URLField(blank=True, max_length=255, null=True), ), ( "image", stdimage.models.StdImageField( blank=True, null=True, upload_to=dynamic_filenames.FilePattern( filename_pattern= "{model_name}/{instance.title:slug}{ext}"), ), ), ("description", models.TextField()), ("displayed", models.BooleanField(default=True)), ( "date", models.DateTimeField(default=django.utils.timezone.now), ), ], ), migrations.CreateModel( name="Feed", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("home_url", models.URLField(verbose_name="Site Home Page")), ("feed_url", models.URLField(verbose_name="RSS Feed URL")), ("title", models.CharField(max_length=255)), ("author", models.CharField(max_length=255)), ("tags", models.CharField(blank=True, max_length=255)), ( "image", stdimage.models.StdImageField( blank=True, null=True, upload_to=dynamic_filenames.FilePattern( filename_pattern= "{model_name}/{instance.title:slug}{ext}"), ), ), ("enabled", models.BooleanField(default=True)), ], ), migrations.AddField( model_name="article", name="feed", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="feeds.Feed"), ), ]