|
|
@@ -7,17 +7,33 @@ from oscar.core.loading import get_class
|
|
7
|
7
|
ReportForm = get_class('dashboard.reports.forms', 'ReportForm')
|
|
8
|
8
|
GeneratorRepository = get_class('dashboard.reports.utils', 'GeneratorRepository')
|
|
9
|
9
|
|
|
10
|
|
-
|
|
11
|
10
|
class IndexView(ListView):
|
|
12
|
11
|
template_name = 'dashboard/reports/index.html'
|
|
13
|
12
|
paginate_by = 25
|
|
14
|
13
|
context_object_name = 'objects'
|
|
|
14
|
+ report_form_class = ReportForm
|
|
|
15
|
+ generator_repository = GeneratorRepository
|
|
|
16
|
+
|
|
|
17
|
+ def _get_generator(self, form):
|
|
|
18
|
+ code = form.cleaned_data['report_type']
|
|
|
19
|
+
|
|
|
20
|
+ repo = self.generator_repository()
|
|
|
21
|
+ generator_cls = repo.get_generator(code)
|
|
|
22
|
+ if not generator_cls:
|
|
|
23
|
+ raise Http404()
|
|
|
24
|
+
|
|
|
25
|
+ download = form.cleaned_data['download']
|
|
|
26
|
+ formatter = 'CSV' if download else 'HTML'
|
|
|
27
|
+
|
|
|
28
|
+ return generator_cls(start_date=form.cleaned_data['date_from'],
|
|
|
29
|
+ end_date=form.cleaned_data['date_to'],
|
|
|
30
|
+ formatter=formatter)
|
|
15
|
31
|
|
|
16
|
32
|
def get(self, request, *args, **kwargs):
|
|
17
|
33
|
if 'report_type' in request.GET:
|
|
18
|
|
- form = ReportForm(request.GET)
|
|
|
34
|
+ form = self.report_form_class(request.GET)
|
|
19
|
35
|
if form.is_valid():
|
|
20
|
|
- generator = _get_generator(form)
|
|
|
36
|
+ generator = self._get_generator(form)
|
|
21
|
37
|
if not generator.is_available_to(request.user):
|
|
22
|
38
|
return HttpResponseForbidden(_("You do not have access to this report"))
|
|
23
|
39
|
|
|
|
@@ -32,7 +48,7 @@ class IndexView(ListView):
|
|
32
|
48
|
context['description'] = generator.report_description()
|
|
33
|
49
|
return self.render_to_response(context)
|
|
34
|
50
|
else:
|
|
35
|
|
- form = ReportForm()
|
|
|
51
|
+ form = self.report_form_class()
|
|
36
|
52
|
return TemplateResponse(request, self.template_name, {'form': form})
|
|
37
|
53
|
|
|
38
|
54
|
def set_list_view_attrs(self, generator, report):
|
|
|
@@ -40,17 +56,3 @@ class IndexView(ListView):
|
|
40
|
56
|
self.object_list = self.queryset = report
|
|
41
|
57
|
|
|
42
|
58
|
|
|
43
|
|
-def _get_generator(form):
|
|
44
|
|
- code = form.cleaned_data['report_type']
|
|
45
|
|
-
|
|
46
|
|
- repo = GeneratorRepository()
|
|
47
|
|
- generator_cls = repo.get_generator(code)
|
|
48
|
|
- if not generator_cls:
|
|
49
|
|
- raise Http404()
|
|
50
|
|
-
|
|
51
|
|
- download = form.cleaned_data['download']
|
|
52
|
|
- formatter = 'CSV' if download else 'HTML'
|
|
53
|
|
-
|
|
54
|
|
- return generator_cls(start_date=form.cleaned_data['date_from'],
|
|
55
|
|
- end_date=form.cleaned_data['date_to'],
|
|
56
|
|
- formatter=formatter)
|