From 61ac7abc8572f3ae82e858b40937b90b0bcddf14 Mon Sep 17 00:00:00 2001 From: Andy Byers Date: Wed, 5 Jun 2024 15:54:12 +0100 Subject: [PATCH] Handles exporting metrics by month --- logic.py | 28 +++++++++++++++++++++++++++- views.py | 10 +++++++++- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/logic.py b/logic.py index 036d080..eac3bf8 100644 --- a/logic.py +++ b/logic.py @@ -1,8 +1,13 @@ -from plugins.books import models +import os +import csv from datetime import date, timedelta, datetime from dateutil.relativedelta import relativedelta from django.utils import timezone +from django.conf import settings + +from plugins.books import models +from core import files def get_first_day(dt, d_years=0, d_months=0): @@ -169,3 +174,24 @@ def get_chapter_contributor_items(book): return items +def export_metrics_by_month(dates, data): + """ + Serves a CSV of metrics by month. + """ + filename = '{0}.csv'.format(timezone.now()) + full_path = os.path.join(settings.BASE_DIR, 'files', 'temp', filename) + with open(full_path, 'w', encoding='utf-8') as csvfile: + csv_writer = csv.writer(csvfile, delimiter=',') + csv_writer.writerow( + ['Book', 'Book ID'] + dates, + + ) + for item in data: + row = [item.get('book').title, item.get('book').pk] + item.get('date_metrics') + print(row) + csv_writer.writerow(row) + + return files.serve_temp_file( + full_path, + filename + ) \ No newline at end of file diff --git a/views.py b/views.py index bac0b56..a0233ac 100644 --- a/views.py +++ b/views.py @@ -324,7 +324,15 @@ def book_metrics_by_month(request): } ) - data, dates, current_year, previous_year = logic.book_metrics_by_month(books, date_parts) + data, dates, current_year, previous_year = logic.book_metrics_by_month( + books, + date_parts, + ) + if request.POST: + return logic.export_metrics_by_month( + dates, + data, + ) template = 'books/metrics_by_month.html' context = {