From d30600f75ffc4a6e598ad8203015b7da4012b622 Mon Sep 17 00:00:00 2001 From: krishtimil <30183049+krishtimil@users.noreply.github.com> Date: Fri, 16 Dec 2022 22:37:07 +0545 Subject: [PATCH 1/2] Added routes to export certificates in csv Url is as /export/evetn_id/category_id/ --- certification_system/certificate/views.py | 49 +++++++++++++++++++ .../certification_system/urls.py | 4 ++ 2 files changed, 53 insertions(+) diff --git a/certification_system/certificate/views.py b/certification_system/certificate/views.py index de3c489..ee24562 100644 --- a/certification_system/certificate/views.py +++ b/certification_system/certificate/views.py @@ -13,6 +13,7 @@ from utils.email import send_bulk_email import os from utils.images import save_temporary_image +from django.http import HttpResponse # Create your views here. @@ -303,3 +304,51 @@ def post(self, request, format=None): }, status=status.HTTP_201_CREATED, ) + +class CertificateCSVExportView(APIView): + def get(self, request, event_id = None, category_id = None): + certificates = Certificate.objects.all() + filename="all" + if event_id: + event = Event.objects.get(id=event_id) + certificates = certificates.filter(event__id=event_id) + filename = event.name + if category_id: + category = Category.objects.get(id=category_id) + certificates = certificates.filter(category__id=category_id) + filename = f'{category.name}_{event.name}' + response = HttpResponse(content_type="text/csv") + response["Content-Disposition"] = f"attachment; filename={filename}.csv" + writer = csv.writer(response) + writer.writerow( + [ + "Certificate ID", + "Name", + "Email", + "Email Sent" + "Event", + "Event ID", + "Category", + "Category ID", + "Image URL", + "Created At", + "Updated At" + ] + ) + for certificate in certificates: + writer.writerow( + [ + certificate.id, + certificate.name, + certificate.email, + certificate.email_sent, + certificate.event.name, + certificate.event.id, + certificate.category.name, + certificate.category.id, + certificate.image.url, + certificate.created_at, + certificate.updated_at, + ] + ) + return response \ No newline at end of file diff --git a/certification_system/certification_system/urls.py b/certification_system/certification_system/urls.py index 76e17cf..2ee45ed 100644 --- a/certification_system/certification_system/urls.py +++ b/certification_system/certification_system/urls.py @@ -12,6 +12,7 @@ TestTemplate, DetailFromImageId, RegenerateBulkCertficate, + CertificateCSVExportView, ) from django.conf.urls.static import static @@ -57,6 +58,9 @@ DetailFromImageId.as_view(), name="detail-from-image", ), + path("export/", CertificateCSVExportView.as_view(), name="export"), + path("export//", CertificateCSVExportView.as_view(), name="export-event"), + path("export///", CertificateCSVExportView.as_view(), name="export-category") ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) # urlpatterns = [ # path('admin/', admin.site.urls), From fef491b30864dc9211e0d511119dd4c5d700b30f Mon Sep 17 00:00:00 2001 From: krishtimil <30183049+krishtimil@users.noreply.github.com> Date: Fri, 16 Dec 2022 23:10:59 +0545 Subject: [PATCH 2/2] Exception fixes --- certification_system/certificate/views.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/certification_system/certificate/views.py b/certification_system/certificate/views.py index ee24562..2d7d310 100644 --- a/certification_system/certificate/views.py +++ b/certification_system/certificate/views.py @@ -14,7 +14,7 @@ import os from utils.images import save_temporary_image from django.http import HttpResponse - +from django.shortcuts import get_object_or_404 # Create your views here. from rest_framework import viewsets @@ -310,11 +310,11 @@ def get(self, request, event_id = None, category_id = None): certificates = Certificate.objects.all() filename="all" if event_id: - event = Event.objects.get(id=event_id) + event = get_object_or_404(Event, id=event_id) certificates = certificates.filter(event__id=event_id) filename = event.name if category_id: - category = Category.objects.get(id=category_id) + category = get_object_or_404(Category, id=category_id, event__id=event_id) certificates = certificates.filter(category__id=category_id) filename = f'{category.name}_{event.name}' response = HttpResponse(content_type="text/csv")