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

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