From c08c401471d4e0ca8906f1c937e8645bceb16dae Mon Sep 17 00:00:00 2001 From: fbormann Date: Thu, 23 Mar 2017 16:50:59 -0300 Subject: [PATCH] now report exports xls files properly, still has to see if my concurrent solution works --- reports/migrations/0003_auto_20170323_1517.py | 20 ++++++++++++++++++++ reports/migrations/0004_auto_20170323_1520.py | 20 ++++++++++++++++++++ reports/migrations/0005_auto_20170323_1603.py | 20 ++++++++++++++++++++ reports/migrations/0006_auto_20170323_1629.py | 20 ++++++++++++++++++++ reports/models.py | 2 +- reports/templates/reports/view.html | 3 ++- reports/urls.py | 1 + reports/views.py | 52 +++++++++++++++++++++++++++++++++------------------- 8 files changed, 117 insertions(+), 21 deletions(-) create mode 100644 reports/migrations/0003_auto_20170323_1517.py create mode 100644 reports/migrations/0004_auto_20170323_1520.py create mode 100644 reports/migrations/0005_auto_20170323_1603.py create mode 100644 reports/migrations/0006_auto_20170323_1629.py diff --git a/reports/migrations/0003_auto_20170323_1517.py b/reports/migrations/0003_auto_20170323_1517.py new file mode 100644 index 0000000..acc5e55 --- /dev/null +++ b/reports/migrations/0003_auto_20170323_1517.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.4 on 2017-03-23 18:17 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('reports', '0002_reportxls'), + ] + + operations = [ + migrations.AlterField( + model_name='reportxls', + name='xls_data', + field=models.TextField(null=True), + ), + ] diff --git a/reports/migrations/0004_auto_20170323_1520.py b/reports/migrations/0004_auto_20170323_1520.py new file mode 100644 index 0000000..40d79f5 --- /dev/null +++ b/reports/migrations/0004_auto_20170323_1520.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.4 on 2017-03-23 18:20 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('reports', '0003_auto_20170323_1517'), + ] + + operations = [ + migrations.AlterField( + model_name='reportxls', + name='xls_data', + field=models.TextField(), + ), + ] diff --git a/reports/migrations/0005_auto_20170323_1603.py b/reports/migrations/0005_auto_20170323_1603.py new file mode 100644 index 0000000..9ec26c5 --- /dev/null +++ b/reports/migrations/0005_auto_20170323_1603.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.4 on 2017-03-23 19:03 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('reports', '0004_auto_20170323_1520'), + ] + + operations = [ + migrations.AlterField( + model_name='reportxls', + name='xls_data', + field=models.FileField(upload_to='excel/'), + ), + ] diff --git a/reports/migrations/0006_auto_20170323_1629.py b/reports/migrations/0006_auto_20170323_1629.py new file mode 100644 index 0000000..56abdbb --- /dev/null +++ b/reports/migrations/0006_auto_20170323_1629.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.4 on 2017-03-23 19:29 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('reports', '0005_auto_20170323_1603'), + ] + + operations = [ + migrations.AlterField( + model_name='reportxls', + name='xls_data', + field=models.FileField(upload_to='files/'), + ), + ] diff --git a/reports/models.py b/reports/models.py index 7ba761b..f0d678c 100644 --- a/reports/models.py +++ b/reports/models.py @@ -17,7 +17,7 @@ class ReportCSV(models.Model): class ReportXLS(models.Model): user = models.ForeignKey(User) - xls_data = models.TextField() + xls_data = models.FileField(upload_to = 'files/') class Meta: verbose_name = "ReportCSV" diff --git a/reports/templates/reports/view.html b/reports/templates/reports/view.html index 3445ae3..16251e6 100644 --- a/reports/templates/reports/view.html +++ b/reports/templates/reports/view.html @@ -65,10 +65,11 @@ diff --git a/reports/urls.py b/reports/urls.py index 7c1ac54..f30311f 100644 --- a/reports/urls.py +++ b/reports/urls.py @@ -8,4 +8,5 @@ urlpatterns = [ url(r'^get/resources/$', views.get_resources, name='get_resource_and_tags'), url(r'^get/tags/$', views.get_tags, name='get_tags'), url(r'^post/download_report/$', views.download_report_csv, name="download_report_csv"), + url(r'^post/download_report/excel$', views.download_report_xls, name="download_report_xls"), ] \ No newline at end of file diff --git a/reports/views.py b/reports/views.py index 0922826..8dce2f5 100644 --- a/reports/views.py +++ b/reports/views.py @@ -4,9 +4,9 @@ from django.utils.translation import ugettext_lazy as _ from django import forms from django.core.urlresolvers import reverse_lazy - +from amadeus import settings from django.contrib import messages - +from os.path import join import django.views.generic as generic from mural.models import SubjectPost, Comment, MuralVisualizations from django.db.models import Q @@ -20,6 +20,7 @@ from collections import OrderedDict from django.forms import formset_factory from .models import ReportCSV, ReportXLS import pandas as pd +from io import BytesIO class ReportView(LoginRequiredMixin, generic.FormView): template_name = "reports/create.html" @@ -156,27 +157,32 @@ class ViewReportView(LoginRequiredMixin, generic.TemplateView): report.save() #for excel files - """ if ReportXLS.objects.filter(user= self.request.user).count() > 0: + if ReportXLS.objects.filter(user= self.request.user).count() > 0: report = ReportXLS.objects.get(user=self.request.user) report.delete() - df.drop(df.columns[[0]], axis=1, inplace=True) - writer = pd.ExcelWriter('pandas_simple.xlsx') - report = ReportXLS(user= self.request.user, xls_data = df.to_excel(writer)) - report.save()""" - + path = join(settings.MEDIA_ROOT, 'files' , 'report'+str(self.request.user.id)+'.xls') + writer = pd.ExcelWriter(path) + df.to_excel(writer, sheet_name='first_sheet') + writer.save() + report = ReportXLS(user= self.request.user ) + report.xls_data.name = path + report.save() return context - """ - Subject: subject where the report is being created - topics_query: it's either one of the topics or all of them - init_date: When the reports filter of dates stars - end_date: When the reports filter of dates end - resources_type_names: resources subclasses name that were selected - tags_id = ID of tag objects that were selected - """ + def get_mural_data(self, subject, topics_query, init_date, end_date, resources_type_names, tags_id): + """ + + Process all the data to be brough by the report + Subject: subject where the report is being created + topics_query: it's either one of the topics or all of them + init_date: When the reports filter of dates stars + end_date: When the reports filter of dates end + resources_type_names: resources subclasses name that were selected + tags_id = ID of tag objects that were selected + """ data = {} students = subject.students.all() formats = ["%d/%m/%Y", "%m/%d/%Y", "%Y-%m-%d"] #so it accepts english and portuguese date formats @@ -199,9 +205,9 @@ class ViewReportView(LoginRequiredMixin, generic.TemplateView): #For each student in the subject for student in students: - data[student] = [] + data[student.id] = [] - data[student].append(student.social_name) + data[student.id].append(student.social_name) interactions = OrderedDict() @@ -289,7 +295,7 @@ class ViewReportView(LoginRequiredMixin, generic.TemplateView): interactions[_("Class")] = "" interactions[_("Performance")] = "" for value in interactions.values(): - data[student].append(value) + data[student.id].append(value) for key in interactions.keys(): @@ -404,4 +410,12 @@ def download_report_csv(request): response = HttpResponse(report.csv_data,content_type='text/csv') response['Content-Disposition'] = 'attachment; filename="report.csv"' + return response + +def download_report_xls(request): + report = ReportXLS.objects.get(user= request.user) + + response = HttpResponse(report.xls_data,content_type='application/ms-excel') + response['Content-Disposition'] = 'attachment; filename="report.xls"' + return response \ No newline at end of file -- libgit2 0.21.2