Skip to content

Commit 451f295

Browse files
committed
Inventory report: Order choices and options as in container
Ref syslabcom/scrum#2858
1 parent 75a1aed commit 451f295

File tree

1 file changed

+19
-2
lines changed

1 file changed

+19
-2
lines changed

src/euphorie/client/browser/report.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,14 @@
77
"""
88

99
from .. import MessageFactory as _
10+
from Acquisition import aq_inner
11+
from Acquisition import aq_parent
1012
from base64 import b64encode
1113
from datetime import date
1214
from euphorie.client import model
1315
from euphorie.client import survey
1416
from euphorie.client import utils
17+
from OFS.interfaces import IOrderedContainer
1518
from openpyxl.workbook import Workbook
1619
from openpyxl.writer.excel import save_workbook
1720
from pkg_resources import resource_filename
@@ -293,16 +296,30 @@ def logo(self):
293296
with open(filename, "rb") as data:
294297
return b64encode(data.read())
295298

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+
296312
def selected_options(self):
297313
selected = (
298314
self.sqlsession.query(model.Option)
299315
.join(
300316
model.SurveyTreeItem, model.Option.choice_id == model.SurveyTreeItem.id
301317
)
302318
.filter(model.SurveyTreeItem.session_id == self.context.session.id)
303-
.order_by(model.SurveyTreeItem.path)
304319
)
305320
objs = [
306321
self.context.aq_parent.restrictedTraverse(row.zodb_path) for row in selected
307322
]
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

Comments
 (0)