From 610a3edd87663a9f2b0e2d9b42cf5a9c257e12ab Mon Sep 17 00:00:00 2001
From: Alice Heaton <aliceh@aptivate.org>
Date: Tue, 28 Jul 2015 15:12:04 +0100
Subject: [PATCH] Use the API to fetch the list of categories used in the
 views&edit page.

---
 django/website/hid/tests/views_tests.py |  4 ++--
 django/website/hid/views.py             | 31 +++++++++----------------
 2 files changed, 13 insertions(+), 22 deletions(-)

diff --git a/django/website/hid/tests/views_tests.py b/django/website/hid/tests/views_tests.py
index 9ce9cd13..d6c65db3 100644
--- a/django/website/hid/tests/views_tests.py
+++ b/django/website/hid/tests/views_tests.py
@@ -128,7 +128,7 @@ def test_get_category_options_uses_terms():
     )
 
     view = ViewItems()
-    options = view.get_category_options(ebola_questions.id)
+    options = view.get_category_options(ebola_questions.slug)
 
     assert (type_1.name, type_1.long_name) in options
     assert (type_2.name, type_2.long_name) in options
@@ -174,7 +174,7 @@ def test_get_category_options_orders_by_lowercase_name():
         )
 
     view = ViewItems()
-    options = view.get_category_options(ebola_questions.id)
+    options = view.get_category_options(ebola_questions.slug)
     # Make sure we are only comparing with out test values!
     options = [o for o in options if o in test_term_values]
 
diff --git a/django/website/hid/views.py b/django/website/hid/views.py
index 3dffd826..a027f650 100644
--- a/django/website/hid/views.py
+++ b/django/website/hid/views.py
@@ -13,7 +13,6 @@ from django.views.generic.base import TemplateView
 from django_tables2 import SingleTableView
 
 from chn_spreadsheet.importer import Importer, SheetImportException
-from data_layer.models import Term
 import transport
 from transport.exceptions import TransportException
 from .assets import require_assets
@@ -89,26 +88,18 @@ class ViewItems(SingleTableView):
     def get_queryset(self):
         return transport.items.list()
 
-    def get_category_options(self, categories_id=None):
-        # TODO: Use data layer
-        terms = self.get_matching_terms(categories_id)
-        return tuple((t.name, t.long_name) for t in terms)
-
-    def get_matching_terms(self, categories_id):
-        if categories_id is None:
-            return (Term.objects
-                    .extra(select={'name_lower': 'lower(name)'})
-                    .order_by('name_lower')
-                    .all())
-
-        return (Term.objects
-                .extra(select={'name_lower': 'lower(name)'})
-                .order_by('name_lower')
-                .filter(taxonomy__id=categories_id))
+    def get_category_options(self, taxonomy_slug=None):
+        if taxonomy_slug is not None:
+            terms = transport.terms.list(taxonomy=taxonomy_slug)
+        else:
+            terms = transport.terms.list()
+        terms.sort(key=lambda e: e['name'].lower())
+        return tuple((t['name'], t['long_name']) for t in terms)
 
     def get_table(self, **kwargs):
-        # TODO: Filter on taxonomy
-        kwargs['categories'] = self.get_category_options()
+        kwargs['categories'] = self.get_category_options(
+            QUESTION_TYPE_TAXONOMY
+        )
         return super(ViewItems, self).get_table(**kwargs)
 
     def get_context_data(self, **kwargs):
@@ -127,7 +118,7 @@ class ViewItems(SingleTableView):
                 label=_('Set question type'),
                 items=[(short_name, short_name)
                        for short_name, long_name
-                       in self.get_category_options()],
+                       in self.get_category_options(QUESTION_TYPE_TAXONOMY)],
                 prefix=ADD_CATEGORY_PREFIX
             )
         ]
-- 
GitLab