You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

views.py 1.5KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. from django.http import HttpResponse, HttpResponseForbidden, Http404
  2. from django.template.response import TemplateResponse
  3. from django.views.generic import TemplateView
  4. from oscar.core.loading import import_module
  5. report_forms = import_module('reports.forms', ['ReportForm'])
  6. report_utils = import_module('reports.utils', ['GeneratorRepository'])
  7. class DashboardView(TemplateView):
  8. template_name = 'reports/dashboard.html'
  9. def get(self, request, *args, **kwargs):
  10. if 'report_type' in request.GET:
  11. form = report_forms.ReportForm(request.GET)
  12. if form.is_valid():
  13. generator = _get_generator(form)
  14. if not generator.is_available_to(request.user):
  15. return HttpResponseForbidden("You do not have access to this report")
  16. response = HttpResponse(mimetype=generator.mimetype)
  17. response['Content-Disposition'] = 'attachment; filename=%s' % generator.filename()
  18. generator.generate(response)
  19. return response
  20. else:
  21. form = report_forms.ReportForm()
  22. return TemplateResponse(request, self.template_name, {'form': form})
  23. def _get_generator(form):
  24. code = form.cleaned_data['report_type']
  25. repo = report_utils.GeneratorRepository()
  26. generator_cls = repo.get_generator(code)
  27. if not generator_cls:
  28. raise Http404
  29. return generator_cls(start_date=form.cleaned_data['start_date'],
  30. end_date=form.cleaned_data['end_date'])