Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. from django.http import HttpResponseForbidden, Http404
  2. from django.template.response import TemplateResponse
  3. from django.views.generic import ListView
  4. from django.utils.translation import ugettext_lazy as _
  5. from oscar.core.loading import get_class
  6. ReportForm = get_class('dashboard.reports.forms', 'ReportForm')
  7. GeneratorRepository = get_class('dashboard.reports.utils', 'GeneratorRepository')
  8. class IndexView(ListView):
  9. template_name = 'dashboard/reports/index.html'
  10. paginate_by = 25
  11. context_object_name = 'objects'
  12. report_form_class = ReportForm
  13. generator_repository = GeneratorRepository
  14. def _get_generator(self, form):
  15. code = form.cleaned_data['report_type']
  16. repo = self.generator_repository()
  17. generator_cls = repo.get_generator(code)
  18. if not generator_cls:
  19. raise Http404()
  20. download = form.cleaned_data['download']
  21. formatter = 'CSV' if download else 'HTML'
  22. return generator_cls(start_date=form.cleaned_data['date_from'],
  23. end_date=form.cleaned_data['date_to'],
  24. formatter=formatter)
  25. def get(self, request, *args, **kwargs):
  26. if 'report_type' in request.GET:
  27. form = self.report_form_class(request.GET)
  28. if form.is_valid():
  29. generator = self._get_generator(form)
  30. if not generator.is_available_to(request.user):
  31. return HttpResponseForbidden(_("You do not have access to this report"))
  32. report = generator.generate()
  33. if form.cleaned_data['download']:
  34. return report
  35. else:
  36. self.set_list_view_attrs(generator, report)
  37. context = self.get_context_data(object_list=self.queryset)
  38. context['form'] = form
  39. context['description'] = generator.report_description()
  40. return self.render_to_response(context)
  41. else:
  42. form = self.report_form_class()
  43. return TemplateResponse(request, self.template_name, {'form': form})
  44. def set_list_view_attrs(self, generator, report):
  45. self.template_name = generator.filename()
  46. self.object_list = self.queryset = report