Эх сурвалжийг харах

HUE-2148 [search] Download query can be missing some columns

Romain Rigaux 11 жил өмнө
parent
commit
8e51a5f95e

+ 7 - 6
apps/search/src/search/data_export.py

@@ -28,7 +28,7 @@ LOG = logging.getLogger(__name__)
 DL_FORMATS = [ 'csv', 'xls' ]
 
 
-def download(results, format):
+def download(results, format, collection):
   """
   download(results, format) -> HttpResponse
 
@@ -38,23 +38,24 @@ def download(results, format):
     LOG.error('Unknown download format "%s"' % format)
     return
 
-  content_generator = SearchDataAdapter(results, format)
+  content_generator = SearchDataAdapter(results, format, collection)
   generator = export_csvxls.create_generator(content_generator, format)
   return export_csvxls.make_response(generator, format, 'query_result')
 
 
-def SearchDataAdapter(results, format):
+def SearchDataAdapter(results, format, collection):
   """
   SearchDataAdapter(results, format, db) -> headers, 2D array of data.
   """
   if results and results['response'] and results['response']['docs']:
     search_data = results['response']['docs']
-    order = search_data[0].keys()
+    headers = [field['name'] for field in collection['fields']]
+
     rows = []
 
     for data in search_data:
       row = []
-      for column in order:
+      for column in headers:
         if column not in data:
           row.append("")
         elif isinstance(data[column], basestring) or isinstance(data[column], (int, long, float, complex)):
@@ -65,4 +66,4 @@ def SearchDataAdapter(results, format):
   else:
     rows = [[]]
 
-  yield order, rows
+  yield headers, rows

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 2 - 2
apps/search/src/search/tests.py


+ 3 - 2
apps/search/src/search/views.py

@@ -191,8 +191,9 @@ def download(request):
       resp = HttpResponse(json_docs, mimetype=mimetype)
       resp['Content-Disposition'] = 'attachment; filename=%s.%s' % ('query_result', file_format)
       return resp
-
-    return export_download(json.loads(response.content), file_format)
+    else:
+      collection = json.loads(request.POST.get('collection', '{}'))
+      return export_download(json.loads(response.content), file_format, collection)
   except Exception, e:
     raise PopupException(_("Could not download search results: %s") % e)
 

+ 11 - 11
apps/search/static/js/search.ko.js

@@ -610,24 +610,24 @@ var Collection = function (vm, collection) {
   self.syncFields = function() {
     $.post("/search/get_collection", {
         name: self.name()
-    }, function (data) {
-      if (data.status == 0) {
-        self.idField(data.collection.collection.idField);
-        syncArray(self.template.fieldsAttributes, data.collection.collection.template.fieldsAttributes, false);  
-        syncArray(self.fields, data.collection.collection.fields, false);
-      }
-      // After sync the dynamic fields
-      self.syncDynamicFields()
-  }).fail(function (xhr, textStatus, errorThrown) {});
+      }, function (data) {
+        if (data.status == 0) {
+          self.idField(data.collection.collection.idField);
+          syncArray(self.template.fieldsAttributes, data.collection.collection.template.fieldsAttributes, false);  
+          syncArray(self.fields, data.collection.collection.fields, false);
+        }
+        // After sync the dynamic fields
+        self.syncDynamicFields()
+    }).fail(function (xhr, textStatus, errorThrown) {});
   };
 
   self.syncDynamicFields = function () {
     $.post("/search/index/fields/dynamic", {
-      name: self.name()
+        name: self.name()
       }, function (data) {
         if (data.status == 0) {
           syncArray(self.template.fieldsAttributes, data.gridlayout_header_fields, true);  
-        syncArray(self.fields, data.fields, true);
+          syncArray(self.fields, data.fields, true);
         }
     }).fail(function (xhr, textStatus, errorThrown) {});
   };

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно