'filter_finish': filter_finish
})
- def prepare_result_dict(self,survey, current_filters=[]):
+ def prepare_result_dict(self,survey, current_filters=None):
"""Returns dictionary having values for rendering template"""
+ current_filters = current_filters if current_filters else []
survey_obj = request.registry['survey.survey']
result = {'survey':survey, 'page_ids': []}
for page in survey.page_ids:
total = ceil(total_record / float(limit))
return range(1, int(total + 1))
- def get_graph_data(self, question, current_filters=[]):
+ def get_graph_data(self, question, current_filters=None):
'''Returns formatted data required by graph library on basis of filter'''
+ # TODO refactor this terrible method and merge it with prepare_result_dict
+ current_filters = current_filters if current_filters else []
survey_obj = request.registry['survey.survey']
result = []
if question.type == 'multiple_choice':
data = survey_obj.prepare_result(request.cr, request.uid, question, current_filters, context=request.context)
for answer in data['answers']:
values = []
- for res in data['result']:
- if res[1] == answer:
- values.append({'text': data['rows'][res[0]], 'count': data['result'][res]})
+ for row in data['rows']:
+ values.append({'text': data['rows'].get(row), 'count': data['result'].get((row, answer))})
result.append({'key': data['answers'].get(answer), 'values': values})
return json.dumps(result)
from urlparse import urljoin
from itertools import product
from collections import Counter
+from collections import OrderedDict
import datetime
import logging
:param finished: True for completely filled survey,Falser otherwise.
:returns list of filtered user_input_ids.
'''
- if context is None:
- context = {}
+ context = context if context else {}
if filters:
input_line_obj = self.pool.get('survey.user_input_line')
domain_filter, choice, filter_display_data = [], [], []
filter_display_data.append({'question_text': question.question, 'labels': [label.value for label in labels]})
return filter_display_data
- def prepare_result(self, cr, uid, question, current_filters=[], context=None):
+ def prepare_result(self, cr, uid, question, current_filters=None, context=None):
''' Compute statistical data for questions by counting number of vote per choice on basis of filter '''
- if context is None:
- context = {}
+ current_filters = current_filters if current_filters else []
+ context = context if context else {}
+
#Calculate and return statistics for choice
if question.type in ['simple_choice', 'multiple_choice']:
- result_summary = {}
- [result_summary.update({label.id: {'text': label.value, 'count': 0, 'answer_id': label.id}}) for label in question.labels_ids]
- for input_line in question.user_input_line_ids:
- if input_line.answer_type == 'suggestion' and result_summary.get(input_line.value_suggested.id) and (not(current_filters) or input_line.user_input_id.id in current_filters):
- result_summary[input_line.value_suggested.id]['count'] += 1
- result_summary = result_summary.values()
+ result_summary = []
+ for label in question.labels_ids:
+ count = 0
+ for input_line in question.user_input_line_ids:
+ if input_line.answer_type == 'suggestion' and input_line.value_suggested.id == label.id and (not current_filters or input_line.user_input_id.id in current_filters):
+ count = count + 1
+ label_summary = {'text': label.value, 'count': count, 'answer_id': label.id}
+ result_summary = result_summary + [label_summary]
#Calculate and return statistics for matrix
if question.type == 'matrix':
- rows, answers, res = {}, {}, {}
+ rows = OrderedDict()
+ answers = OrderedDict()
+ res = dict()
[rows.update({label.id: label.value}) for label in question.labels_ids_2]
[answers.update({label.id: label.value}) for label in question.labels_ids]
for cell in product(rows.keys(), answers.keys()):
'most_comman': Counter(all_inputs).most_common(5)})
return result_summary
- def get_input_summary(self, cr, uid, question, current_filters=[], context=None):
+ def get_input_summary(self, cr, uid, question, current_filters=None, context=None):
''' Returns overall summary of question e.g. answered, skipped, total_inputs on basis of filter '''
- if context is None:
- context = {}
+ current_filters = current_filters if current_filters else []
+ context = context if context else {}
result = {}
if question.survey_id.user_input_ids:
total_input_ids = current_filters or [input_id.id for input_id in question.survey_id.user_input_ids if input_id.state != 'new']