From 6be7f3c3cdfa05deea9b76b33302e3e6b0868ff3 Mon Sep 17 00:00:00 2001 From: gw3000 Date: Tue, 8 Aug 2023 16:23:33 +0200 Subject: [PATCH] CSV Export Fixes #2 --- app/export/__init__.py | 0 app/export/admin.py | 3 + app/export/apps.py | 6 ++ app/export/migrations/__init__.py | 0 app/export/models.py | 3 + app/export/templates/export/export_site.html | 19 +++++ app/export/tests.py | 3 + app/export/urls.py | 13 ++++ app/export/views.py | 77 ++++++++++++++++++++ app/templates/partials/_navbar.html | 4 + 10 files changed, 128 insertions(+) create mode 100644 app/export/__init__.py create mode 100644 app/export/admin.py create mode 100644 app/export/apps.py create mode 100644 app/export/migrations/__init__.py create mode 100644 app/export/models.py create mode 100644 app/export/templates/export/export_site.html create mode 100644 app/export/tests.py create mode 100644 app/export/urls.py create mode 100644 app/export/views.py diff --git a/app/export/__init__.py b/app/export/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/export/admin.py b/app/export/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/app/export/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/app/export/apps.py b/app/export/apps.py new file mode 100644 index 0000000..f0eb563 --- /dev/null +++ b/app/export/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ExportConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "export" diff --git a/app/export/migrations/__init__.py b/app/export/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/export/models.py b/app/export/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/app/export/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/app/export/templates/export/export_site.html b/app/export/templates/export/export_site.html new file mode 100644 index 0000000..a998b68 --- /dev/null +++ b/app/export/templates/export/export_site.html @@ -0,0 +1,19 @@ +{% extends "base.html" %} +{% load static %} +{% block content %} +
+
+

Datenexport

+

+ Anbei finden Sie mehrere Möglichkeiten die Daten der Anwendung zu + exportieren. +

+ +
+
+{% endblock content %} diff --git a/app/export/tests.py b/app/export/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/app/export/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/app/export/urls.py b/app/export/urls.py new file mode 100644 index 0000000..d574a77 --- /dev/null +++ b/app/export/urls.py @@ -0,0 +1,13 @@ +from django.urls import path + +from .views import ( + export_birds, + export_costs, + site_exports, +) + +urlpatterns = [ + path("", site_exports, name="site_exports"), + path("birds/", export_birds, name="export_birds"), + path("costs/", export_costs, name="export_costs"), +] diff --git a/app/export/views.py b/app/export/views.py new file mode 100644 index 0000000..5993e1d --- /dev/null +++ b/app/export/views.py @@ -0,0 +1,77 @@ +import csv + +from costs.models import Costs +from bird.models import FallenBird +from django.contrib.auth.decorators import login_required +from django.http import HttpResponse +from django.shortcuts import render + + +@login_required(login_url="account_login") +def site_exports(request): + return render( + request, + "export/export_site.html", + ) + + +@login_required(login_url="account_login") +def export_costs(request): + costs = Costs.objects.all().values_list( + "id_bird__bird_identifier", + "costs", + "created", + "comment", + "user__username") + response = HttpResponse(content_type="text/csv") + response["Content-Disposition"] = "attachment, filename=fbf_costs.csv" + writer = csv.writer(response) + writer.writerow( + ["Vogel", "Betrag in Euro", "Gebucht am", "Kommentar", "Gebucht von"] + ) + for single_costs in costs: + writer.writerow(single_costs) + return response + + +@login_required(login_url="account_login") +def export_birds(request): + birds = FallenBird.objects.all().values_list( + "bird_identifier", + "bird__name", + "age", + "sex", + "date_found", + "place", + "created", + "updated", + "find_circumstances__description", + "diagnostic_finding", + "rescuer__last_name", + "user__username", + "status__description", + "aviary__description", + "sent_to" + ) + response = HttpResponse(content_type="text/csv") + response["Content-Disposition"] = "attachment, filename=fbf_birds.csv" + writer = csv.writer(response) + writer.writerow(["Vogel", + "Patienten Alias", + "Alter", + "Geschlecht", + "gefunden am", + "Fundort", + "Pateient angelegt am", + "Pateient aktualisiert am", + "Fundumstände", + "Diagnose bei Fund", + "Finder (Nachname)", + "Benutzer", + "Status", + "Voliere", + "Übersandt" + ]) + for bird in birds: + writer.writerow(bird) + return response diff --git a/app/templates/partials/_navbar.html b/app/templates/partials/_navbar.html index b8097e8..10225ed 100644 --- a/app/templates/partials/_navbar.html +++ b/app/templates/partials/_navbar.html @@ -30,6 +30,10 @@ alle Kosten + {% endif %}