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',)