diff --git a/profiles/admin.py b/profiles/admin.py
index e4976f4ef38425b24841dd2bdac2a21638e18bfd..b10721234b4fc81105f5a21c6e5bd76cf869d1ec 100644
--- a/profiles/admin.py
+++ b/profiles/admin.py
@@ -59,13 +59,3 @@ class StudentAdmin(ProfileAdminMixin, admin.ModelAdmin, ExportCsvMixin):
         model = Student
     ordering = ['-updated_date']
     actions = ["export_as_csv"]
-
-
-"""def post_event_on_telegram(event):
-    #message_html = render_to_string('telegram_message.html', {
-    #    'event': event
-    #})
-    telegram_settings = settings.TELEGRAM
-    bot = telegram.Bot(token=telegram_settings['bot_token'])
-    bot.send_message(chat_id="@%s" % telegram_settings['channel_name'],
-        text="test", parse_mode=telegram.ParseMode.HTML)"""
diff --git a/projects/admin.py b/projects/admin.py
index e43c198933a4a26170dc30281e0b5bcfc49817f1..73920dfc3baa9f3c149df39c01b91d847786fef6 100644
--- a/projects/admin.py
+++ b/projects/admin.py
@@ -7,6 +7,10 @@ from dynamicforms.models import Form
 from .models import Edition, Participation, Project, EditionForm
 from django.contrib.admin import SimpleListFilter
 from profiles.models import Student
+from django.http import HttpResponse
+import csv
+from users.models import User
+import codecs
 
 
 @admin.register(Project)
@@ -106,6 +110,36 @@ class EditionFormAdmin(admin.ModelAdmin):
 class ParticipationAdmin(admin.ModelAdmin):
     """Participation admin panel."""
 
+    def export_as_csv(self, request, queryset):
+        meta = self.model._meta
+        field_names = [field.name for field in meta.fields]
+        response = HttpResponse(content_type='text/csv')
+        response['Content-Disposition'] = 'attachment; filename={}.csv'.format(
+            meta)
+        response.write(codecs.BOM_UTF8)  # force response to be UTF-8
+        writer = csv.writer(response, delimiter=';')
+
+        writer.writerow(['first_name', 'last_name', 'school', 'grade',
+                         'phone_number', 'scholarship'] + field_names)
+
+        list_email = queryset.values_list("user__email", flat=True)
+        nb_user = 0
+        for obj in queryset:
+
+            name = User.objects.filter(
+                email=str(list_email[nb_user])).values('first_name', 'last_name', 'phone_number')
+            school = Student.objects.filter(
+                user__email=str(list_email[nb_user])).values('school', 'grade', 'scholarship')
+
+            row = writer.writerow([name[0]['first_name'], name[0]['last_name'], school[0]['school'], school[0]['grade'], name[0]['phone_number'], school[0]['scholarship']] + [getattr(obj, field)
+                                                                                                                                                                               for field in field_names])
+            nb_user += 1
+        return response
+
+    export_as_csv.short_description = "Exporter sélection (en .csv)"
+
+    actions = ["export_as_csv"]
+
     list_display = ('user', 'edition', 'submitted', 'state')
     list_filter = (SchoolFilter,
                    'edition', 'submitted', 'state',)
diff --git a/visits/admin.py b/visits/admin.py
index 946121346ecaa877176885aa5abe7519d9d7f53c..a75522de07ffa572a3eff15f7851903400ed4371 100644
--- a/visits/admin.py
+++ b/visits/admin.py
@@ -182,7 +182,7 @@ class ParticipationAdmin(admin.ModelAdmin):
         response.write(codecs.BOM_UTF8)  # force response to be UTF-8
         writer = csv.writer(response, delimiter=';')
 
-        writer.writerow(['first_name', 'last_name', 'school',
+        writer.writerow(['first_name', 'last_name', 'school', 'grade',
                          'phone_number', 'scholarship'] + field_names)
 
         list_email = queryset.values_list("user__email", flat=True)
@@ -192,10 +192,10 @@ class ParticipationAdmin(admin.ModelAdmin):
             name = User.objects.filter(
                 email=str(list_email[nb_user])).values('first_name', 'last_name', 'phone_number')
             school = Student.objects.filter(
-                user__email=str(list_email[nb_user])).values('school', 'scholarship')
+                user__email=str(list_email[nb_user])).values('school', 'grade', 'scholarship')
 
-            row = writer.writerow([name[0]['first_name'], name[0]['last_name'], school[0]['school'], name[0]['phone_number'], school[0]['scholarship']] + [getattr(obj, field)
-                                                                                                                                                           for field in field_names])
+            row = writer.writerow([name[0]['first_name'], name[0]['last_name'], school[0]['school'], school[0]['grade'], name[0]['phone_number'], school[0]['scholarship']] + [getattr(obj, field)
+                                                                                                                                                                               for field in field_names])
             nb_user += 1
         return response
 
diff --git a/visits/migrations/0002_visit_context_sheet.py b/visits/migrations/0002_visit_context_sheet.py
new file mode 100644
index 0000000000000000000000000000000000000000..bd96e25ddf3fdd2e6715396c6d5b284815be9d54
--- /dev/null
+++ b/visits/migrations/0002_visit_context_sheet.py
@@ -0,0 +1,18 @@
+# Generated by Django 2.2 on 2021-05-14 16:46
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('visits', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='visit',
+            name='context_sheet',
+            field=models.FileField(blank=True, help_text='Informe le lycéen de détails sur le contexte. Tout format supporté, PDF recommandé.', null=True, upload_to='visits/context_sheets/', verbose_name='fiche contexte'),
+        ),
+    ]
diff --git a/visits/models.py b/visits/models.py
index 31944309f7d678cdb6268db0838c68a559e6126c..7c5a8f8885b8a2393d9ddc967addbb506327996e 100644
--- a/visits/models.py
+++ b/visits/models.py
@@ -169,11 +169,17 @@ class Visit(models.Model):
         upload_to='visits/fact_sheets/',
         help_text=('Informe le lycéen de détails sur la sortie. '
                    'Tous formats supportés, PDF recommandé.'))
+    context_sheet = models.FileField(
+        'fiche contexte', blank=True, null=True,
+        upload_to='visits/context_sheets/',
+        help_text=('Informe le lycéen de détails sur le contexte. '
+                   'Tout format supporté, PDF recommandé.'))
     permission = models.FileField(
         'autorisation de sortie', blank=True, null=True,
         upload_to='visits/visit_permissions/',
         help_text=('À mettre à disposition pour que le lycéen la remplisse. '
                    'Tout format supporté, PDF recommandé.'))
+
     participants = models.ManyToManyField('users.User',
                                           through='Participation')
     organizers = models.ManyToManyField('profiles.Tutor',
diff --git a/visits/serializers.py b/visits/serializers.py
index 201aeecd3cca1f8c093c8d0ff00c7fa81e3e0758..4bd93a652c67e0a49c274ca79eb653b2a961d6ba 100644
--- a/visits/serializers.py
+++ b/visits/serializers.py
@@ -94,7 +94,7 @@ class VisitSerializer(VisitListSerializer):
             'place', 'date', 'start_time', 'end_time', 'meeting',
             'deadline', 'passed', 'registrations_open',
             'participants', 'organizers',
-            'image', 'fact_sheet', 'permission',
+            'image', 'fact_sheet', 'context_sheet', 'permission',
             'url',)