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",
            ),
        ),
    ]
Пример #3
0
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",
            ),
        ),
    ]
Пример #5
0
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")
Пример #7
0
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"), )
Пример #8
0
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,
        ),
    ]
Пример #9
0
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),
        ),
    ]
Пример #12
0
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",
                    ),
                ),
            ],
        )
    ]
Пример #14
0
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)],
            ),
        )
    ]
Пример #15
0
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"),
    ]
Пример #16
0
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,
            ),
        ),
    ]
Пример #17
0
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",
            ),
        )
    ]
Пример #19
0
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",
            ),
        ),
    ]
Пример #22
0
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"),
        ),
    ]
Пример #27
0
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"),
        ),
    ]
Пример #28
0
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",
            ),
        ),
    ]
Пример #30
0
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"),
        ),
    ]