|
7 | 7 | """ |
8 | 8 |
|
9 | 9 | from .. import MessageFactory as _ |
| 10 | +from Acquisition import aq_inner |
| 11 | +from Acquisition import aq_parent |
10 | 12 | from base64 import b64encode |
11 | 13 | from datetime import date |
12 | 14 | from euphorie.client import model |
13 | 15 | from euphorie.client import survey |
14 | 16 | from euphorie.client import utils |
| 17 | +from OFS.interfaces import IOrderedContainer |
15 | 18 | from openpyxl.workbook import Workbook |
16 | 19 | from openpyxl.writer.excel import save_workbook |
17 | 20 | from pkg_resources import resource_filename |
@@ -293,16 +296,30 @@ def logo(self): |
293 | 296 | with open(filename, "rb") as data: |
294 | 297 | return b64encode(data.read()) |
295 | 298 |
|
| 299 | + def get_position_in_parent(self, obj): |
| 300 | + parent = aq_parent(aq_inner(obj)) |
| 301 | + ordered = IOrderedContainer(parent, None) |
| 302 | + if ordered is not None: |
| 303 | + return ordered.getObjectPosition(obj.getId()) |
| 304 | + return 0 |
| 305 | + |
| 306 | + def get_sort_key(self, obj): |
| 307 | + return ( |
| 308 | + self.get_position_in_parent(aq_parent(obj)), |
| 309 | + self.get_position_in_parent(obj), |
| 310 | + ) |
| 311 | + |
296 | 312 | def selected_options(self): |
297 | 313 | selected = ( |
298 | 314 | self.sqlsession.query(model.Option) |
299 | 315 | .join( |
300 | 316 | model.SurveyTreeItem, model.Option.choice_id == model.SurveyTreeItem.id |
301 | 317 | ) |
302 | 318 | .filter(model.SurveyTreeItem.session_id == self.context.session.id) |
303 | | - .order_by(model.SurveyTreeItem.path) |
304 | 319 | ) |
305 | 320 | objs = [ |
306 | 321 | self.context.aq_parent.restrictedTraverse(row.zodb_path) for row in selected |
307 | 322 | ] |
308 | | - return [obj for obj in objs if obj.objectIds()] |
| 323 | + objs_with_recommendations = [obj for obj in objs if obj.objectIds()] |
| 324 | + ordered = sorted(objs_with_recommendations, key=self.get_sort_key) |
| 325 | + return ordered |
0 commit comments