Browse Source

Move _get_generator inside report.views.IndexView

This allows it to be customised via view class subclassing.

Also, made report_form_class and generator_repository views attributes
so they can be more easily overriden.

Fixes #431
master
andrefsp 13 years ago
parent
commit
775e2e7bbd
1 changed files with 20 additions and 18 deletions
  1. 20
    18
      oscar/apps/dashboard/reports/views.py

+ 20
- 18
oscar/apps/dashboard/reports/views.py View File

@@ -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)

Loading…
Cancel
Save