# Generated by Django 3.1.12 on 2021-06-18 13:02

import agir.gestion.models.common
import agir.lib.model_fields
import django.contrib.gis.db.models.fields
import django.contrib.postgres.fields
import django.contrib.postgres.indexes
import django.contrib.postgres.search
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
import django_countries.fields
import dynamic_filenames
import phonenumber_field.modelfields

import agir.lib.utils


class Migration(migrations.Migration):
    initial = True

    dependencies = [
        ("events", "0004_event_online_url"),
        ("auth", "0012_alter_user_first_name_max_length"),
        ("people", "0004_display_name_and_image"),
        ("contenttypes", "0002_remove_content_type_name"),
    ]

    operations = [
        migrations.CreateModel(
            name="Commentaire",
            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"
                    ),
                ),
                (
                    "auteur_nom",
                    models.CharField(
                        help_text="Pour pouvoir afficher un nom si la personne a été supprimée.",
                        max_length=200,
                        verbose_name="Nom de l'auteur",
                    ),
                ),
                (
                    "type",
                    models.CharField(
                        choices=[("R", "Remarque"), ("T", "Todo")],
                        max_length=1,
                        verbose_name="Type de commentaire",
                    ),
                ),
                ("texte", models.TextField(verbose_name="Texte du commentaire")),
                (
                    "cache",
                    models.BooleanField(
                        default=False, verbose_name="Commentaire caché"
                    ),
                ),
                (
                    "auteur",
                    models.ForeignKey(
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="+",
                        to="people.person",
                        verbose_name="Auteur⋅ice",
                    ),
                ),
            ],
            options={
                "ordering": ("created",),
            },
        ),
        migrations.CreateModel(
            name="Compte",
            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"
                    ),
                ),
                (
                    "designation",
                    models.CharField(
                        max_length=5, unique=True, verbose_name="Désignation courte"
                    ),
                ),
                (
                    "nom",
                    models.CharField(
                        max_length=200, verbose_name="Nom complet du compte"
                    ),
                ),
                (
                    "description",
                    models.TextField(blank=True, verbose_name="Description"),
                ),
                (
                    "configuration",
                    models.JSONField(
                        blank=True, default=dict, verbose_name="Configuration"
                    ),
                ),
            ],
            options={
                "verbose_name": "Compte",
                "verbose_name_plural": "Comptes",
                "permissions": [
                    (
                        "acces_contenu_restreint",
                        "Voir les projets, dépenses et documents dont l'accès est indiqué comme restreint.",
                    ),
                    (
                        "acces_contenu_secret",
                        "Voir les projets, dépenses et documents dont l'accès est indiqué commme secret.",
                    ),
                    ("engager_depense", "Engager une dépense pour ce compte"),
                    ("gerer_depense", "Gérer les dépenses"),
                    ("controler_depense", "Contrôler les dépenses"),
                    ("gerer_projet", "Gérer les projets"),
                    ("controler_projet", "Contrôler les projets"),
                ],
            },
        ),
        migrations.CreateModel(
            name="Depense",
            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"
                    ),
                ),
                (
                    "numero",
                    models.CharField(
                        default=agir.lib.utils.numero_unique,
                        editable=False,
                        help_text="Numéro unique pour identifier chaque objet sur la plateforme.",
                        max_length=7,
                        unique=True,
                        verbose_name="Numéro unique",
                    ),
                ),
                (
                    "titre",
                    models.CharField(
                        help_text="Une description sommaire de la nature de la dépense",
                        max_length=100,
                        verbose_name="Titre de la dépense",
                    ),
                ),
                (
                    "description",
                    models.TextField(
                        blank=True,
                        help_text="La description doit permettre de pouvoir identifier de façon non ambigue la dépense et sa nature dans le cas où le titre ne suffit pas.",
                        verbose_name="Description",
                    ),
                ),
                (
                    "type",
                    models.CharField(
                        choices=[
                            ("AFM", "Achats de fournitures et marchandises"),
                            ("AFM-B", "Achats de fourniture de bureau"),
                            ("AFM-G", "Achats de goodies"),
                            ("FBC", "Frais bancaires"),
                            ("FDV", "Frais divers"),
                            ("FRH", "Frais de réception et d'hébergement"),
                            ("FRH-H", "Frais d'hébergement"),
                            ("FRH-A", "Frais de restauration"),
                            ("HEC", "Honoraires de l'expert comptable"),
                            ("HCC", "Honoraires et conseils en communication"),
                            ("HCC-G", "Graphisme et maquettage"),
                            ("HCC-C", "Conseil en communication"),
                            ("IMM", "Location ou mise à disposition immobilière"),
                            ("IMM-S", "Mise à disposition d'une salle"),
                            ("IMM-L", "Loyers de location"),
                            ("PAU", "Production audiovisuelle"),
                            ("PIM", "Publication et impression (hors R39)"),
                            ("REU", "Frais divers liées aux réunions publiques"),
                            ("TRA", "Transports et déplacement"),
                            ("TRA-T", "Billets de train"),
                            ("TRA-A", "Billets d'avion"),
                            ("TRA-L", "Location d'un véhicule"),
                            ("TRA-K", "Frais kilométriques"),
                            ("REF", "Refacturation"),
                        ],
                        max_length=5,
                        verbose_name="Type de dépense",
                    ),
                ),
                (
                    "montant",
                    models.DecimalField(
                        decimal_places=2,
                        max_digits=10,
                        verbose_name="Montant de la dépense",
                    ),
                ),
                (
                    "etat",
                    models.CharField(
                        choices=[
                            ("R", "Dossier refusé"),
                            ("V", "En attente de validation d'opportunité"),
                            ("A", "En attente de l'engagement de la dépense"),
                            ("C", "Constitution du dossier"),
                            ("O", "Dossier complété"),
                            ("L", "Dossier clôturé"),
                        ],
                        default="V",
                        max_length=1,
                        verbose_name="État de ce dossier de dépense",
                    ),
                ),
                (
                    "date_depense",
                    models.DateField(
                        blank=True,
                        help_text="Date à laquelle la dépense a été engagée (généralement l'acceptation du contrat)",
                        null=True,
                        verbose_name="Date d'engagement de la dépense",
                    ),
                ),
                (
                    "niveau_acces",
                    models.CharField(
                        choices=[
                            ("N", "Sans restriction"),
                            ("R", "Restreint"),
                            ("S", "Secret"),
                        ],
                        default="N",
                        max_length=1,
                        verbose_name="Niveau d'accès",
                    ),
                ),
                (
                    "beneficiaires",
                    models.ManyToManyField(
                        blank=True,
                        related_name="depenses",
                        related_query_name="depense",
                        to="people.Person",
                        verbose_name="Bénéficiaires de la dépense",
                    ),
                ),
                (
                    "commentaires",
                    models.ManyToManyField(
                        help_text="Ces commentaires permettent d'ajouter de garder la trace des opérations de traitement des différentes pièces.",
                        to="gestion.Commentaire",
                        verbose_name="Commentaires",
                    ),
                ),
                (
                    "compte",
                    models.ForeignKey(
                        help_text="Le compte dont fait partie cette dépense.",
                        on_delete=django.db.models.deletion.PROTECT,
                        related_name="depenses",
                        related_query_name="depense",
                        to="gestion.compte",
                    ),
                ),
                (
                    "depenses_refacturees",
                    models.ManyToManyField(
                        blank=True,
                        help_text="Toutes les dépenses concernées par cette refacturation.",
                        related_name="refacturations",
                        related_query_name="refacturation",
                        to="gestion.Depense",
                        verbose_name="Dépenses à refacturer",
                    ),
                ),
            ],
            options={
                "verbose_name": "Dépense",
                "verbose_name_plural": "Dépenses",
            },
        ),
        migrations.CreateModel(
            name="Document",
            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"
                    ),
                ),
                (
                    "numero",
                    models.CharField(
                        default=agir.lib.utils.numero_unique,
                        editable=False,
                        help_text="Numéro unique pour identifier chaque objet sur la plateforme.",
                        max_length=7,
                        unique=True,
                        verbose_name="Numéro unique",
                    ),
                ),
                (
                    "titre",
                    models.CharField(
                        help_text="Titre permettant d'identifier le document",
                        max_length=200,
                        verbose_name="Titre du document",
                    ),
                ),
                (
                    "identifiant",
                    models.CharField(
                        blank=True,
                        help_text="Indiquez ici si ce document a un identifiant ou un numéro (numéro de facture ou de devis, identifiant de transaction, etc.)",
                        max_length=100,
                        verbose_name="Identifiant ou numéro externe",
                    ),
                ),
                (
                    "type",
                    models.CharField(
                        choices=[
                            ("DEV", "Devis"),
                            ("FAC", "Facture"),
                            ("JUS", "Justificatif de dépense"),
                            ("JUS-BIL", "Billet de train"),
                            ("JUS-TRAIN", "Justificatif de train"),
                            ("JUS-CEM", "Carte d'embarquement"),
                            ("PAY", "Preuve de paiement"),
                            ("PAY-CHK", "Scan du chèque"),
                            ("PAY-TKT", "Ticket de caisse"),
                            ("GRA", "Attestation de gratuité"),
                            ("EXA", "Exemplaire fourni"),
                            ("PHO", "Photographie de l'objet ou de l'événement"),
                            ("AUT", "Autre (à détailler dans les commentaires)"),
                        ],
                        max_length=10,
                        verbose_name="Type de document",
                    ),
                ),
                (
                    "requis",
                    models.CharField(
                        choices=[
                            ("NEC", "Strictement nécessaire"),
                            ("PRE", "Préférable"),
                            ("IGN", "Peut être ignoré"),
                        ],
                        default="NEC",
                        max_length=3,
                        verbose_name="Obligatoire ?",
                    ),
                ),
                (
                    "description",
                    models.TextField(
                        blank=True,
                        help_text="Toute description complémentaire nécessaire pour identifier clairement le document (et le rechercher)",
                        verbose_name="Description du document",
                    ),
                ),
                (
                    "fichier",
                    models.FileField(
                        blank=True,
                        null=True,
                        upload_to=dynamic_filenames.FilePattern(
                            filename_pattern="gestion/documents/{uuid:.2base32}/{uuid}{ext}"
                        ),
                        verbose_name="Fichier du document",
                    ),
                ),
                (
                    "commentaires",
                    models.ManyToManyField(
                        help_text="Ces commentaires permettent d'ajouter de garder la trace des opérations de traitement des différentes pièces.",
                        to="gestion.Commentaire",
                        verbose_name="Commentaires",
                    ),
                ),
            ],
            options={
                "verbose_name": "Document justificatif",
                "verbose_name_plural": "Documents justificatifs",
            },
        ),
        migrations.CreateModel(
            name="Fournisseur",
            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"
                    ),
                ),
                (
                    "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"
                    ),
                ),
                (
                    "nom",
                    models.CharField(max_length=100, verbose_name="Nom du fournisseur"),
                ),
                (
                    "description",
                    models.TextField(blank=True, verbose_name="Description"),
                ),
                (
                    "iban",
                    agir.lib.model_fields.IBANField(
                        allowed_countries=None,
                        blank=True,
                        max_length=34,
                        verbose_name="IBAN du fournisseur",
                    ),
                ),
                (
                    "contact_phone",
                    phonenumber_field.modelfields.PhoneNumberField(
                        blank=True,
                        max_length=128,
                        region=None,
                        verbose_name="Numéro de téléphone",
                    ),
                ),
                (
                    "contact_email",
                    models.EmailField(
                        blank=True, max_length=254, verbose_name="Adresse email"
                    ),
                ),
            ],
            options={
                "abstract": False,
            },
        ),
        migrations.CreateModel(
            name="Reglement",
            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"
                    ),
                ),
                (
                    "intitule",
                    models.CharField(
                        max_length=200, verbose_name="Intitulé du règlement"
                    ),
                ),
                (
                    "mode",
                    models.CharField(
                        choices=[
                            ("V", "Par virement"),
                            ("P", "Par prélèvement"),
                            ("C", "Par chèque"),
                            ("A", "Par carte bancaire"),
                            ("S", "En espèces"),
                        ],
                        max_length=1,
                        verbose_name="Mode de règlement",
                    ),
                ),
                (
                    "montant",
                    models.DecimalField(
                        decimal_places=2,
                        max_digits=10,
                        verbose_name="Montant du règlement",
                    ),
                ),
                (
                    "date",
                    models.DateField(
                        default=django.utils.timezone.now,
                        verbose_name="Date du règlement",
                    ),
                ),
                (
                    "statut",
                    models.CharField(
                        choices=[("C", "En cours"), ("R", "Réglé"), ("P", "Rapproché")],
                        default="C",
                        max_length=1,
                    ),
                ),
                (
                    "nom_fournisseur",
                    models.CharField(max_length=100, verbose_name="Nom du fournisseur"),
                ),
                (
                    "iban_fournisseur",
                    agir.lib.model_fields.IBANField(
                        allowed_countries=None,
                        blank=True,
                        max_length=34,
                        verbose_name="IBAN du fournisseur",
                    ),
                ),
                (
                    "contact_phone_fournisseur",
                    phonenumber_field.modelfields.PhoneNumberField(
                        blank=True,
                        max_length=128,
                        region=None,
                        verbose_name="Numéro de téléphone",
                    ),
                ),
                (
                    "contact_email_fournisseur",
                    models.EmailField(
                        blank=True, max_length=254, verbose_name="Adresse email"
                    ),
                ),
                (
                    "location_address1_fournisseur",
                    models.CharField(
                        blank=True, max_length=100, verbose_name="adresse (1ère ligne)"
                    ),
                ),
                (
                    "location_address2_fournisseur",
                    models.CharField(
                        blank=True, max_length=100, verbose_name="adresse (2ère ligne)"
                    ),
                ),
                (
                    "location_city_fournisseur",
                    models.CharField(max_length=100, verbose_name="ville"),
                ),
                (
                    "location_zip_fournisseur",
                    models.CharField(max_length=20, verbose_name="code postal"),
                ),
                (
                    "location_country_fournisseur",
                    django_countries.fields.CountryField(
                        default="FR", max_length=2, verbose_name="pays"
                    ),
                ),
                (
                    "depense",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.PROTECT,
                        related_name="reglements",
                        related_query_name="reglement",
                        to="gestion.depense",
                        verbose_name="Dépense concernée",
                    ),
                ),
                (
                    "fournisseur",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        to="gestion.fournisseur",
                    ),
                ),
                (
                    "preuve",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.PROTECT,
                        to="gestion.document",
                        verbose_name="Preuve de paiement",
                    ),
                ),
            ],
            options={
                "verbose_name": "règlement",
                "ordering": ("date",),
            },
        ),
        migrations.CreateModel(
            name="Projet",
            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"
                    ),
                ),
                (
                    "numero",
                    models.CharField(
                        default=agir.lib.utils.numero_unique,
                        editable=False,
                        help_text="Numéro unique pour identifier chaque objet sur la plateforme.",
                        max_length=7,
                        unique=True,
                        verbose_name="Numéro unique",
                    ),
                ),
                (
                    "titre",
                    models.CharField(max_length=40, verbose_name="Titre du projet"),
                ),
                (
                    "type",
                    models.CharField(
                        choices=[
                            ("CON", "Conférence de presse"),
                            ("REU", "Réunion publique"),
                            ("REU-loc", "Réunion publique organisée localement"),
                            ("REU-ora", "Réunion publique avec un orateur national"),
                            ("REU-can", "Réunion publique avec un candidat"),
                            ("DEB", "Débats et conférences"),
                            ("DEB-aso", "Débat organisé par une association"),
                            ("DEB-con", "Conférence"),
                            ("DEB-caf", "Café-débat"),
                            ("MAN", "Manifestation publique"),
                            ("MAN-loc", "Manifestation ou marche organisée localement"),
                            ("MAN-nat", "Manifestation ou marche nationale"),
                            ("ACT", "Actions"),
                            ("EVE", "Événements spécifiques"),
                            ("EVE-AMF", "AMFiS d'été"),
                            ("EVE-CON", "Convention"),
                            ("RH", "Dépenses RH mensuelles"),
                        ],
                        max_length=10,
                        verbose_name="Type de projet",
                    ),
                ),
                (
                    "etat",
                    models.CharField(
                        choices=[
                            ("DFI", "Demande de financement"),
                            ("REF", "Refusé"),
                            ("ECO", "En cours de constitution"),
                            ("FIN", "Finalisé par le secrétariat"),
                            ("REN", "Renvoyé par l'équipe financière"),
                            ("CLO", "Clôturé"),
                        ],
                        default="DFI",
                        max_length=3,
                        verbose_name="Statut",
                    ),
                ),
                (
                    "description",
                    models.TextField(null=True, verbose_name="Description du projet"),
                ),
                (
                    "niveau_acces",
                    models.CharField(
                        choices=[
                            ("N", "Sans restriction"),
                            ("R", "Restreint"),
                            ("S", "Secret"),
                        ],
                        default="N",
                        max_length=1,
                        verbose_name="Niveau d'accès",
                    ),
                ),
                ("details", models.JSONField(default=dict, verbose_name="Détails")),
                (
                    "commentaires",
                    models.ManyToManyField(
                        help_text="Ces commentaires permettent d'ajouter de garder la trace des opérations de traitement des différentes pièces.",
                        to="gestion.Commentaire",
                        verbose_name="Commentaires",
                    ),
                ),
                (
                    "documents",
                    models.ManyToManyField(
                        related_name="projets",
                        related_query_name="projet",
                        to="gestion.Document",
                    ),
                ),
                (
                    "event",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        to="events.event",
                        verbose_name="Événement sur la plateforme",
                    ),
                ),
            ],
            options={
                "verbose_name": "Projet",
                "verbose_name_plural": "Projets",
            },
        ),
        migrations.CreateModel(
            name="OrdreVirement",
            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"
                    ),
                ),
                (
                    "numero",
                    models.CharField(
                        default=agir.lib.utils.numero_unique,
                        editable=False,
                        help_text="Numéro unique pour identifier chaque objet sur la plateforme.",
                        max_length=7,
                        unique=True,
                        verbose_name="Numéro unique",
                    ),
                ),
                (
                    "statut",
                    models.CharField(
                        choices=[
                            ("E", "Émis"),
                            ("T", "Transmis à la banque"),
                            ("R", "Rapproché"),
                        ],
                        default="E",
                        max_length=1,
                        verbose_name="Statut",
                    ),
                ),
                (
                    "date",
                    models.DateField(
                        default=django.utils.timezone.now,
                        verbose_name="Date d'exécution de l'ordre",
                    ),
                ),
                (
                    "fichier",
                    models.FileField(
                        upload_to=dynamic_filenames.FilePattern(
                            filename_pattern="gestion/ordres/{uuid:.2base32}/{uuid}{ext}"
                        ),
                        verbose_name="Fichier SEPA de l'ordre de virement",
                    ),
                ),
                (
                    "commentaires",
                    models.ManyToManyField(
                        help_text="Ces commentaires permettent d'ajouter de garder la trace des opérations de traitement des différentes pièces.",
                        to="gestion.Commentaire",
                        verbose_name="Commentaires",
                    ),
                ),
                (
                    "reglements",
                    models.ManyToManyField(
                        related_name="ordre",
                        related_query_name="ordres",
                        to="gestion.Reglement",
                    ),
                ),
            ],
            options={
                "abstract": False,
            },
        ),
        migrations.CreateModel(
            name="InstanceCherchable",
            fields=[
                (
                    "id",
                    models.AutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                (
                    "recherche",
                    django.contrib.postgres.search.SearchVectorField(
                        verbose_name="Champ de recherche"
                    ),
                ),
                ("object_id", models.PositiveIntegerField()),
                (
                    "content_type",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        to="contenttypes.contenttype",
                    ),
                ),
            ],
            options={
                "verbose_name": "Recherche",
                "verbose_name_plural": "Recherche",
            },
        ),
        migrations.AddField(
            model_name="depense",
            name="documents",
            field=models.ManyToManyField(
                related_name="depenses",
                related_query_name="depense",
                to="gestion.Document",
            ),
        ),
        migrations.AddField(
            model_name="depense",
            name="fournisseur",
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                to="gestion.fournisseur",
            ),
        ),
        migrations.AddField(
            model_name="depense",
            name="projet",
            field=models.ForeignKey(
                blank=True,
                help_text="Le projet éventuel auquel est rattaché cette dépense.",
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name="depenses",
                related_query_name="depense",
                to="gestion.projet",
            ),
        ),
        migrations.CreateModel(
            name="Autorisation",
            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"
                    ),
                ),
                (
                    "autorisations",
                    django.contrib.postgres.fields.ArrayField(
                        base_field=models.CharField(max_length=100),
                        default=list,
                        size=None,
                    ),
                ),
                (
                    "compte",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="autorisations",
                        related_query_name="autorisation",
                        to="gestion.compte",
                    ),
                ),
                (
                    "group",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="+",
                        to="auth.group",
                    ),
                ),
            ],
            options={
                "abstract": False,
            },
        ),
        migrations.CreateModel(
            name="Participation",
            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"
                    ),
                ),
                (
                    "role",
                    models.CharField(
                        choices=[
                            ("CAN", "Candidat"),
                            ("ORA", "Orateur"),
                            ("ORG", "Organisation"),
                            ("GES", "Gestion de projet"),
                        ],
                        max_length=3,
                        verbose_name="Rôle sur ce projet",
                    ),
                ),
                ("precisions", models.TextField(blank=True, verbose_name="Précisions")),
                (
                    "person",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="+",
                        related_query_name="participation",
                        to="people.person",
                        verbose_name="Personne",
                    ),
                ),
                (
                    "projet",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="participations",
                        related_query_name="participation",
                        to="gestion.projet",
                        verbose_name="Projet",
                    ),
                ),
            ],
            options={
                "verbose_name": "participation à un projet",
                "verbose_name_plural": "participations à des projets",
                "unique_together": {("projet", "person", "role")},
            },
        ),
        migrations.AddIndex(
            model_name="instancecherchable",
            index=django.contrib.postgres.indexes.GinIndex(
                fields=["recherche"], name="gestion_ins_recherc_d4e6ff_gin"
            ),
        ),
    ]
